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()时
boxv1
?为什么/为什么不?类型重写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
实现是邪恶的,不要在实际代码中这样做)