c# - 为什么类 Type 不是密封的,我能用它做什么?

标签 c# inheritance types

我正在查看 Type 的元数据,并注意到一个成员受到保护,这让我想知道可以从中派生什么,这让我意识到我可以编写一个从它派生的类,所有这些让我想知道是什么我可以做到这一点(如果有的话)。

以下没有编译器错误:

class MyType : Type
{
    // Implemented abstract members here.
}

最佳答案

好问题。我只有部分答案。目前有 4 个类派生自 Type。您可以在 MSDN 上找到类型层次结构.

System.Object
  System.Reflection.MemberInfo
    System.Type
      System.Reflection.Emit.EnumBuilder
      System.Reflection.Emit.GenericTypeParameterBuilder
      System.Reflection.Emit.TypeBuilder
      System.Reflection.TypeDelegator

看起来这些类型基本上是用来封装一些“实例构建”逻辑的。但是我还没有探索代码。

编辑

哦,哇...这很有趣。代码示例似乎不仅创建了类型的实例,而且还创建了。因此,其中一些类正在创建 CLR 类型,并将它们保存到真正的程序集中。这很酷。

再次编辑

有大狗说的不止我上面列举的四种。我使用 Reflector ReSharper 查找派生类型并找到了这些(可能仍然缺少类型):

System.Type
  System.RuntimeType
  System.ReflectionOnlyType
  System.Reflection.Emit.EnumBuilder
  System.Reflection.Emit.GenericTypeParameterBuilder
  System.Reflection.Emit.SymbolType
  System.Reflection.Emit.TypeBuilder
  System.Reflection.Emit.TypeBuilderInstantiation
  System.Reflection.TypeDelegator

再次编辑

正如@MarcGravell 所说,您真的没有理由想要从其中任何一个派生一个类。但是,您可以在您自己的类中使用它们来封装您自己的逻辑。

关于c# - 为什么类 Type 不是密封的,我能用它做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367188/

相关文章:

c# - 此 C# 代码是否会因为寄存器或缓存中的值永远不会写回主内存而失败?

javascript - 正则表达式 ['!@#$%*\]\[()-=_+{}:\";?,.\/A-Za-z0-9\s] 允许 < 字符

Java 泛型 - 获取返回与第一个参数相同类型的方法

c# - Microsoft.Practices.Unity 无处可寻

C# 字典返回类型

c++ - 向下转型和虚函数

JavaScript 继承——我做的对吗?

c++ - 复制构造函数不是继承的

将 char 字符串转换为其基础数据类型

vb.net - Visual Basic .NET 中的 UInt32 数据类型是什么?