這是一個家庭作業的問題,這就是爲什麼它可能是有點怪(也道歉,如果標題不是很好)C#值類型和字符串
假設V1是類型的值類型X重新定義的ToString,是使用有任何區別Console.WriteLine(V1)和Console.WriteLine(v1.toString())?
這是一個家庭作業的問題,這就是爲什麼它可能是有點怪(也道歉,如果標題不是很好)C#值類型和字符串
假設V1是類型的值類型X重新定義的ToString,是使用有任何區別Console.WriteLine(V1)和Console.WriteLine(v1.toString())?
最簡單的答案是「是的,有區別」。顯然重要的是你知道是。我不會告訴你,但我會告訴你如何進行調查...
Console.WriteLine(v1)
和Console.WriteLine(v1.ToString())
在Main
方法ildasm
(或反射器中IL模式),並期待在方法調用
問題,你可能要考慮和可能讓你加分:如果你使用自定義類,而不是一個結構的
Console.WriteLine
的設計可以消除你注意到的任何效率低下嗎?如果他會告訴教授。我相信他會看看他的臉.. :) – 2012-04-28 12:13:05
+1好回答:) – 2012-04-28 12:44:01
關於裝箱有一個小的區別,但對於ToString
的正常實現它不會改變程序的可觀察行爲(超出最小性能命中)。你應該弄清楚什麼時候出現拳擊。
是否通過v1
到Console.WriteLine
框呢?
是否打電話v1.ToString()
方框v1
?爲什麼/爲什麼不?是否重寫ToString
?即從Object
繼承的調用方法與重寫的方法之間是否有區別?
示例程序,展現出一個可觀察的區別:http://ideone.com/p1omq(注意它的ToString實現是邪惡,不要在真正的代碼中做到這一點) – CodesInChaos 2012-04-28 12:48:09
不知道它的確定回答功課的問題,因爲這感覺就像我做你一個DIS服務:)
當沒有一個ToString調用Console.Writeline(V1)()方法將導致控制檯也可以撥打ToString()
以獲得實際價值。另外,我不確定你的教授是不是一個「技巧問題」的人,但在C#中,沒有「toString()」方法 - 它實際上是「ToString()」(注意用戶大寫「To」)
你試過了,看看它給了你什麼嗎? – 2012-04-28 12:09:03
這是一個詭計問題嗎? toString不是有效的C#方法。在C#中,它是ToString,所以答案是肯定的,這是有區別的。 – bugfixr 2012-04-28 12:20:08
預計課程不會涵蓋C#的這些微妙點。 – CodesInChaos 2012-04-28 12:20:25