【发布时间】:2010-08-11 04:46:26
【问题描述】:
鉴于this MSDN 文章,我们了解到.Net 中的通用类型系统有这样的引用类型分类:
“引用类型可以是自描述类型、指针类型或接口类型。 引用类型的类型可以根据自描述类型的值来确定。自描述类型进一步分为数组和类类型。”
- 因此,例如,数组是自描述类型,因为我们可以根据其值确定其类型?
- 怎么样?
- 是这样吗,还是这个定义还有更多内容?
【问题讨论】:
鉴于this MSDN 文章,我们了解到.Net 中的通用类型系统有这样的引用类型分类:
“引用类型可以是自描述类型、指针类型或接口类型。 引用类型的类型可以根据自描述类型的值来确定。自描述类型进一步分为数组和类类型。”
【问题讨论】:
自描述类型是由关于自身的可用元数据描述的类型。最常见的形式是类类型。在这里很容易说明自我描述的含义:
类型本身由类定义描述。例如具有名称、年龄和 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
对于数组,情况类似:数组类包含有关条目数量的信息以及有关存储条目的类型信息(见上文)。
【讨论】:
自描述类型是一种为垃圾收集器提供自身信息的数据类型。基本上任何具有某种形式的元数据的类型,例如一个程序集,将被视为自描述类型。
【讨论】:
也许说明指针类型和接口类型如何不是自描述的最好方法是用一个例子:
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
换句话说,声明为接口类型的对象只能描述实现它们的类。指针只能描述它们所指向的对象的类型。
【讨论】: