Gau*_*wal 8 .net c# boxing types
我在拳击和拆箱方面有点困惑.根据其定义
Boxing是ValueTypes到引用类型(Object)的隐式转换.
UnBoxing是将引用类型(Object)显式转换为其等效的ValueTypes.
描述这个的最好例子是
int i = 123; object o = i; // boxing
Run Code Online (Sandbox Code Playgroud)
和
o = 123; i = (int)o; // unboxing
Run Code Online (Sandbox Code Playgroud)
但我的问题是int是否是值类型而字符串是引用类型
int i = 123; string s = i.ToString();
Run Code Online (Sandbox Code Playgroud)
和
s = "123"; i = (int)s;
Run Code Online (Sandbox Code Playgroud)
这是拳击和拆箱的例子吗?
Cod*_*aos 20
打电话ToString
不是拳击.它创建一个恰好包含int的文本表示的新字符串.
调用(object)1
它时,会在包含int的堆上创建一个新实例.但它仍然是一个int
.(您可以验证o.GetType()
)
无法使用强制转换转换为字符串int
.所以你的代码不会编译.
如果你第一次将你的字符串强制转换为object
你的代码将会编译但在运行时失败,因为你的对象没有盒装int.您只能将值类型拆分为完全正确的类型(或关联的可为空).
两个例子:
破碎:
object o=i.ToString();// o is a string
int i2=(int)o;//Exception, since o is no int
Run Code Online (Sandbox Code Playgroud)
工作:
object o=i;// o is a boxed int
int i2=(int)o;//works
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12827 次 |
最近记录: |