【问题标题】:Value Type Vs Reference Type - Object Class C#值类型与引用类型 - 对象类 C#
【发布时间】:2009-07-30 09:21:51
【问题描述】:

如果Value Types和Reference Type都来自Object Type,它是一个引用类型,那么值类型如何是值类型,而引用类型都来自于引用类型。

【问题讨论】:

    标签: c# object reference


    【解决方案1】:

    基本上是作弊;-p

    任何struct(即从ValueType 继承的任何东西)都使用值类型语义处理。但是有必要进行装箱转换object;这意味着如果您将 struct 转换为 object,它将创建一个特殊对象(在托管堆上),其中包含来自您的值的数据(作为克隆)*。

    盒装版本是引用类型。您可以将其拆箱(通过强制转换)回到 struct 版本,这将反转此(将克隆数据从堆上的对象复制到您的本地值)。


    *=除非它是一个空的Nullable<T>,它会框到null;同样,null 拆箱为空的Nullable<T>

    【讨论】:

    • 你能解释一下或者指向一个关于魔法(作弊)是如何发生的链接吗?即结构是值类型,而对象引用类型
    • @skjagini - 简单地说,编译器和运行时可以很容易地发现某些东西是从ValueType 派生的,并以不同的方式对待它......除此之外? ECMA335
    • +1 尽管像 C# 这样的语言将装箱结构假设为值类型,但在 CLR 的内部,每个托管值类型都有一个对应的类类型,该类类型封装了对应值类型的字段,并且将所有成员包装到该字段的成员。即使 C# 语言规范将这样的东西称为值类型,它也会表现为引用类型。
    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多