.Net中的自我描述类型究竟是什么意思?

时间:2010-05-11 11:39:27

标签: .net types

鉴于this MSDN文章,我们了解到.Net中的 Common Type System 具有引用类型的分类:

“参考类型可以是自描述类型指针类型接口类型。 可以从自描述类型的值确定引用类型的类型。自我描述类型进一步分为数组类类型。“

  1. 因此,例如,数组是一种自描述类型,因为我们可以从其值中确定其类型吗?
  2. 如何?
  3. 是这样,还是这个定义还有更多?

3 个答案:

答案 0 :(得分:3)

自描述类型是一种数据类型,它为垃圾收集器的好处提供有关自身的信息。基本上任何具有某种形式的元数据的类型,例如一个集会,将被视为一种自我描述的类型。

答案 1 :(得分:3)

自描述类型是由可用的元数据描述的类型。最常见的形式是类类型。在那里展示自我描述意味着很容易:

类型本身由类定义描述。例如具有名称,年龄和customerid的客户类。此类实例的纯数据类似于:

8%3|*1C U S T O M E R

仅因为环境具有包含元数据的类描述,您才真正知道其中一些数据形成了id,age和name。并且为了识别元数据,对象内容数据与类ID合并,以便环境可以将类描述与元数据匹配。

|Class metadata reference: Metadata for the customer class
| |Customer ID: Field 
| |  |Customer Age: Field
| |  ||Customer Name : Field
8%3|*1C U S T O M E R

对于数组,它类似:数组类包含有关条目数的信息以及有关存储条目的类型信息(参见上文)。

答案 2 :(得分:3)

可能是显示指针类型和接口类型自我描述的最佳方式,例如:

using System;

interface ISample { }
class CSample : ISample { }

class Program {
    static unsafe void Main(string[] args) {
        ISample itf = new CSample();
        var it = itf.GetType();
        Console.WriteLine(it.FullName);
        int value = 42;
        int* p = &value;
        var pt = p->GetType();
        Console.WriteLine(pt.FullName);
        Console.ReadLine();
    }
}

输出:

CSample 
System.Int32

换句话说,声明为接口类型的对象只能描述实现它们的类。指针只能描述它们指向的对象的类型。