类型定义和类型引用有什么区别?

What's the difference between type definition and type reference?

我正在阅读 Jeffrey Richter 的书 CLR via C#

Chapter 23(23.3.2)中表示"A System.Type object represents a type reference(as opposed to a type definition)."

这里的类型引用和类型定义是什么意思?

当您通过 class、结构、接口或枚举定义新类型时,就会发生类型定义。

类型引用是有关类型的信息集合,例如它的名称或其成员。

System.Typeclass可以表示类型,但不能定义类型。 当您调用 typeof(TypeName)object.GetType() 时,您将处理具有 System.Type.

对象的类型表示

您不能仅使用 System.Type 对象直接实例化一个类型的对象。只描述类型,不描述类型。这就是为什么它被称为参考。

一个类型定义暗示了该类型的实际实现,例如,如果它是一个class,则意味着[=19]的定义=](及其所有属性和字段)。

一个类型引用,简单的说就是System.Type包含了一个特定类型的细节,也就是关于这个类型的元数据。

作者在对比System.TypeSystem.TypeInfo。来自 the documentation:

A TypeInfo object represents the type definition itself, whereas a Type object represents a reference to the type definition.

仅当实现 class(类型定义)的程序集已加载或可加载时,才能实例化 class 的 System.TypeInfo。要实例化 System.Type,唯一的要求是当前程序包含对实现程序集的 引用

另见