代码之家  ›  专栏  ›  技术社区  ›  tzup

.NET中的自我描述类型究竟意味着什么?

  •  7
  • tzup  · 技术社区  · 15 年前

    鉴于 this 文章,我们了解到 通用型系统 在.NET中 引用类型 :

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

    1. 例如,数组是自描述类型,因为我们可以从它的值确定它的类型?
    2. 怎么用?
    3. 是这样的,还是有更多的定义?
    3 回复  |  直到 14 年前
        1
  •  3
  •   Foxfire    15 年前

    自我描述类型是由关于自身的可用元数据描述的类型。最常见的形式是类类型。在这里,很容易展示自我描述的含义:

    类型本身由类定义描述。例如,具有名称、年龄和customerID的customer类。此类实例的纯数据如下所示:

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

    仅因为环境具有包含元数据的类描述,您才真正知道其中一些数据构成了ID、年龄和名称。为了识别元数据,将对象内容数据与类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
  •   James    15 年前

    自描述类型是一种数据类型,它为垃圾收集器提供有关自身的信息。基本上,任何具有某种形式元数据(如程序集)的类型都将被视为自描述类型。

        3
  •  3
  •   Hans Passant    14 年前

    也许是显示指针类型和接口类型的最佳方法 自我描述就是一个例子:

    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
    

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