【问题标题】:What's the difference between type definition and type reference?类型定义和类型引用有什么区别?
【发布时间】:2017-08-12 18:58:07
【问题描述】:

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

Chapter 23(23.3.2),它说"A System.Type object represents a type reference(as opposed to a type definition)."

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

【问题讨论】:

  • 这种语言可能受到 CLR 规范的影响太大了。程序集中的元数据区分 TypeDef 和 TypeRef。您可以使用 C# 中的 class、struct 或 delegate 关键字获得类型声明的 TypeDef。 TypeRef 出现在您使用在别处声明的类型的任何地方。就像你对 Object.GetType() 或 typeof 关键字所做的那样。

标签: c# clr


【解决方案1】:

作者将System.TypeSystem.TypeInfo 进行对比。来自the documentation

TypeInfo 对象表示类型定义本身,而 Type 对象表示对类型定义的引用.

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

另见What's the difference between Type and TypeInfo?

【讨论】:

  • 这里的'reference'和“引用和指针”中的概念是一样的吗? @约翰吴
  • 类似于,但不是指向内存地址,类型引用指向程序集(包括版本和强名称,如果适用)和类型名称。
【解决方案2】:

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

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

System.Type 类可以表示一个类型,但不能定义一个类型。 当您调用typeof(TypeName)object.GetType() 时,您将处理带有System.Type 对象的类型表示。

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

【讨论】:

    【解决方案3】:

    类型定义意味着类型的实际实现,例如,如果它是一个类,它意味着类的定义(以及它的所有属性和字段)。

    类型引用,简单的说System.Type包含了特定类型的详细信息,也就是关于该类型的元数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-06
      • 2011-06-30
      • 2010-10-02
      • 1970-01-01
      • 2010-12-11
      • 2014-08-14
      • 2011-01-25
      • 2023-01-04
      相关资源
      最近更新 更多