4

这是一个家庭作业问题,这就是为什么它可能有点奇怪(如果标题不是很好,也请道歉)

假设v1是重新定义ToString的X类型的值类型,那么使用Console.WriteLine(v1)Console.WriteLine(v1.toString())有什么区别吗?

4

3 回答 3

11

最简单的答案是“是的,有区别”。显然,重要的是你知道那个区别什么。我不会告诉你,但我会告诉你如何调查它......

  • 编写一个简短的程序,其中包含所描述的自定义值类型,并且 方法中Console.WriteLine(v1)Console.WriteLine(v1.ToString())Main
  • 编译程序
  • 运行ildasm(或 IL 模式下的 Reflector)并查看方法调用之间的区别
    • 在每种情况下调用哪个方法重载?
    • 每种情况下的值会发生什么变化?

您可能想要考虑的问题以及可能会给您带来额外奖励的问题:

  • 如果您使用自定义类而不是结构,有什么区别吗?
  • 你能想出任何Console.WriteLine可以设计的方法来消除你注意到的任何低效率吗?
于 2012-04-28T12:11:46.537 回答
1

关于装箱有一个小的区别,但对于它的正常实现,ToString它不会改变程序的可观察行为(除了最小的性能影响)。你应该弄清楚拳击何时发生。

难道传球v1Console.WriteLine框了吗?

有电话亭v1.ToString()v1?为什么/为什么不?类型覆盖是否重要ToString?即调用继承自的Object方法和重写的方法之间有区别吗?

于 2012-04-28T12:11:29.107 回答
0

不确定是否可以回答家庭作业问题,因为这感觉就像我在给你服务:)

在没有 ToString() 方法的情况下调用 Console.Writeline(v1) 将导致控制台也调用ToString()以获取实际值。

另外,我不确定你的教授是否是一个“技巧问题”类型的人,但在 C# 中,没有“toString()”方法 - 它实际上是“ToString()”(注意大写“To”的用户)

于 2012-04-28T12:11:37.477 回答