当值类型被装箱时,它被放置在untyped参考对象。
那么是什么原因导致这里出现无效的强制转换异常呢?
long l = 1;
object obj = (object)l;
double d = (double)obj;
不,它没有放置在无类型对象中。对于每种值类型,CLR 中都有一个装箱引用类型。所以你会有某物 like:
public class BoxedInt32 // Not the actual name
{
private readonly int value;
public BoxedInt32(int value)
{
this.value = value;
}
}
该装箱类型无法在 C# 中直接访问,但可以在 C++/CLI 中访问。显然它知道原始类型。所以在 C# 中你必须有一个编译时类型object
对于变量,但这并不意味着这是对象的实际类型。
See the ECMA CLI 规范 http://www.ecma-international.org/publications/standards/Ecma-335.htm or 通过 C# 进行 CLR https://rads.stackoverflow.com/amzn/click/com/0735621632更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)