很简单的问题:
int a = 5;
string str = a.ToString();
Run Code Online (Sandbox Code Playgroud)
既然ToString是System.Object的虚方法,它是否意味着每次我为整数类型调用此方法时,会发生装箱?
小智 11
你已经得到了答案告诉你,当ToString()一个值类型被覆盖时,你调用它时就没有拳击,但是有一些方法可以实际看到它.
取类型int?(Nullable<int>).这是一个有用的类型,因为它是一个值类型,但装箱可能会产生一个空引用,并且无法通过空引用调用实例方法.它确实有一个重写的ToString()方法.它没有(也没有)重写的GetType()方法.
int? i = null;
var s = i.ToString(); // okay: initialises s to ""
var t = i.GetType(); // not okay: throws NullReferenceException
Run Code Online (Sandbox Code Playgroud)
这表明在通话中没有拳击i.ToString(),但是在通话中有拳击i.GetType().
其他答案提到ToString通话不会导致拳击。推论毫无价值:
int i = 42;
String.Format("number: {0}", i.ToString());
Run Code Online (Sandbox Code Playgroud)
不会导致拳击,而:
int i = 42;
String.Format("number: {0}", i);
Run Code Online (Sandbox Code Playgroud)
将要。
(你听到了吗,Resharper?)
(但是,请记住,如果您将格式化程序应用于String.Format(例如CultureInfo,您需要使用第二个版本)
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |