在下面的代码中...
int i=5;
object o = 5;
Console.WriteLine(o); //prints 5
我有三个问题:
1)获得了哪些附加/有用的功能5
驻留在变量中o
那5
由变量表示i
不具有 ?
2)如果某些代码需要值类型,那么我们可以将 int 传递给它i
,但如果它期望引用类型,它可能对装箱中的 5 不感兴趣o
反正 。那么什么时候在代码中显式使用装箱转换呢?
3)怎么来的Console.WriteLine(o)
打印出 5 而不是 System.Object ??
变量 o 中的 5 获得了哪些附加/有用的功能,而变量 i 表示的 5 则没有?
难得的是你want装箱,但有时是必要的这样做。在旧版本的 .NET 中,装箱通常是必要的,因为某些方法仅适用于object
(例如 ArrayList 的方法)。现在有了泛型,这个问题就不那么严重了,所以装箱在较新的代码中出现的频率会降低。
如果某些代码需要值类型,那么我们可以将 int i 传递给它,但如果它需要引用类型,那么它可能对 o 中装箱的 5 不感兴趣。那么什么时候在代码中显式使用装箱转换呢?
在实践中,拳击通常会自动发生。如果您想让代码的读者更清楚地知道装箱正在发生,您可以显式地对变量进行装箱。如果性能可能是一个问题,这可能是相关的。
为什么 Console.WriteLine(o) 打印出 5 而不是 System.Object ?
Because ToString
是一个虚拟方法object
这意味着调用的实现取决于运行时类型,而不是静态类型。自从int
覆盖ToString
有了它自己的实现,它是int.ToString
被调用的,不是由提供的默认实现object
.
object o = 5;
Console.WriteLine(o.GetType()); // outputs System.Int32, not System.Object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)