只是一个简单的观察。 property MethodBase.IsConstructor
不能与static
构造函数一起使用,文档中没有提到这个事实(引用:“ true 如果此方法是由{{1}表示的构造函数对象“)。
样品:
ConstructorInfo
问题:为什么?错误或不完整的规范?
答案 0 :(得分:5)
“静态构造函数”实际上只是C#术语。在.NET本身中,有一个类型的初始化程序(根据Type.TypeInitializer
)。类型可以有一个类型初始值设定项,而不需要在C#中声明静态构造函数 - 例如用于静态变量初始化。
在源C#中使用静态构造函数有两个作用:
beforefieldinit
标志,可能会改变时间因此,虽然它由ConstructorInfo
表示,但我并不特别感到惊讶IsConstructor
返回false,因为它不是CLR术语中的构造函数。它是一个由ConstructorInfo
对象表示的非构造函数:)如果文档被重写为“如果此方法是实例构造函数”,并且如果GetConstructor
没有返回它,那肯定会更清楚(因为这非常不一致,IMO)。
此外,GetConstructor
的文档会声明:
要使用此方法重载获取类初始值设定项(.cctor),必须指定
BindingFlags.Static | BindingFlags.NonPublic
。您还可以使用TypeInitializer
属性获取类初始值设定项。
......所以他们并没有把它称为构造函数。