我在拳击和不拳击方面有点困惑。根据它的定义
装箱是将ValueTypes隐式转换为引用类型(对象)。
UnBoxing是将引用类型(对象)显式转换为其等效的ValueTypes。
描述这一点的最好例子是
int i = 123; object o = i; // boxing和
o = 123; i = (int)o; // unboxing 但我的问题是int是值类型还是字符串是引用类型
int i = 123; string s = i.ToString();和
s = "123"; i = (int)s; 这是拳击和取消拳击的例子吗?
发布于 2011-06-21 10:00:31
调用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工作:
object o=i;// o is a boxed int
int i2=(int)o;//works 发布于 2011-06-21 10:18:39
int i = 2;
string s = i.ToString();这是而不是装箱。这只是对Int32.ToString()的方法调用,它返回表示int值的格式化字符串。
i = (int)s;这段代码不会编译,因为System.String和System.Int32之间没有明确的转换。
想一想,用以下的方式来理解什么是拳击和什么不是拳击和取消拳击
GetType().因此,如果System.Int32.是有效的,那么它只是一个显式转换,而不是取消装箱操作,因为s.GetType()将返回System.String,而不是s.GetType()。
发布于 2011-06-21 10:54:29
装箱/取消装箱:将值类型转换为其对象表示,反之亦然(例如int和object)。
相反,ToString()方法是一个生成新字符串的操作,与装箱/强制/类型会话无关。
https://stackoverflow.com/questions/6423452
复制相似问题