C#值类型和字符串

C#值类型和字符串,c#,tostring,value-type,C#,Tostring,Value Type,这是一个家庭作业问题,这就是为什么它可能有点奇怪(如果标题不是很好,也要道歉) 假设v1是重新定义ToString的X类型的值类型,那么使用Console.WriteLine(v1)和Console.WriteLine(v1.ToString())之间有什么区别吗?关于装箱有一点不同,但对于ToString的正常实现,它不会改变程序的可观察行为(超出最小性能打击)。您应该知道装箱何时发生 是否将v1传递到控制台。WriteLine框中 调用v1.ToString()时boxv1?为什么/为什么不

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


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

关于装箱有一点不同,但对于
ToString
的正常实现,它不会改变程序的可观察行为(超出最小性能打击)。您应该知道装箱何时发生

是否将
v1
传递到
控制台。WriteLine
框中


调用
v1.ToString()时
box
v1
?为什么/为什么不?类型重写
ToString
是否重要?也就是说,从
对象继承的调用方法和重写的方法之间是否有区别?

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

在不使用ToString()方法调用Console.Writeline(v1)时,将导致控制台也调用
ToString()
以获取实际值


另外,我不确定你的教授是否是一个“诡计问题”类型的人,但在C#中,没有“toString()”方法——实际上是“toString()”(注意大写字母的使用者“To”)

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

  • 编写一个包含所述自定义值类型的短程序,并在
    Main
    方法中同时包含
    Console.WriteLine(v1)
    Console.WriteLine(v1.ToString())
  • 编译程序
  • 运行
    ildasm
    (或在IL模式下运行Reflector),查看方法调用之间的差异
    • 在每种情况下调用哪个方法重载
    • 在每种情况下,值会发生什么变化
您可能需要思考的问题,以及可能为您赢得额外学分的问题:

  • 如果使用自定义类而不是结构,有什么区别吗
  • 你能想出
    Console.WriteLine
    设计的任何方法来消除你注意到的任何低效现象吗

你有没有试过,看看它给了你什么?这是一个骗人的问题吗?toString不是有效的C#方法。在C#中,它是ToString,所以答案是肯定的,这是有区别的。不会期望课程涵盖C#的如此微妙的点。@CodeInChaos教授也不会期望。我的错,我复制了它(我通常的编程语言是Java),在这个问题上它实际上是ToString,他会告诉教授。我肯定他会看他的脸一会儿……)显示明显差异的示例程序:(注意它的
ToString
实现是邪恶的,不要在实际代码中这样做)