MethodBase.IsConstructor无法使用静态构造函数指定

时间:2013-11-14 10:16:09

标签: c# .net reflection constructor static-constructor

只是一个简单的观察。 property MethodBase.IsConstructor不能与static构造函数一起使用,文档中没有提到这个事实(引用:“ true 如果此方法是由{{1}表示的构造函数对象“)。

样品:

ConstructorInfo

问题:为什么?错误或不完整的规范?

1 个答案:

答案 0 :(得分:5)

“静态构造函数”实际上只是C#术语。在.NET本身中,有一个类型的初始化程序(根据Type.TypeInitializer)。类型可以有一个类型初始值设定项,而不需要在C#中声明静态构造函数 - 例如用于静态变量初始化。

在源C#中使用静态构造函数有两个作用:

  • 它从类型中删除beforefieldinit标志,可能会改变时间
  • 它将代码添加到类型初始值设定项

因此,虽然它由ConstructorInfo表示,但我并不特别感到惊讶IsConstructor返回false,因为它不是CLR术语中的构造函数。它是一个由ConstructorInfo对象表示的非构造函数:)如果文档被重写为“如果此方法是实例构造函数”,并且如果GetConstructor没有返回它,那肯定会更清楚(因为这非常不一致,IMO)。

此外,GetConstructor的文档会声明:

  

要使用此方法重载获取类初始值设定项(.cctor),必须指定BindingFlags.Static | BindingFlags.NonPublic。您还可以使用TypeInitializer属性获取类初始值设定项。

......所以他们并没有把它称为构造函数。