C#中外部静态构造函数的用途是什么?

时间:2017-02-15 19:55:39

标签: c# constructor static extern language-specifications

相对于“C#语言规范。版本5.0”的“10.12静态构造函数”部分,静态构造函数可以用“extern”修饰符标记,在这种情况下,它被称为外部静态构造函数

普通(非外部)静态构造函数是众所周知的。它们用于初始化静态字段和属性。

外部静态方法通常用于通过P / Invoke调用本机函数。

我也知道相当深奥的 extern 构造函数(另请参阅this question)。例如,String类有几个这样的declarations,这些构造函数由运行时实现。

但外部静态构造函数的任何实际用法是什么?我搜索了coreclr repo并没有发现任何内容。语言规范无法描述从未在野外使用的某些构造。或者可以?

我的猜测:C#有外部静态构造函数,因为CLR支持它们(原则上)。

1 个答案:

答案 0 :(得分:1)

来自MSDN:

  

当构造函数声明包含extern修饰符时,   构造函数据说是一个外部构造函数。因为外在的   它的构造函数声明没有提供实际的实现   构造函数体由分号组成。

     

...

我们似乎无法想到使用此声明的充分理由,而且肯定是正确的。 但是当你进一步挖掘时,你会发现整个动态组装世界或者代码生成。

如果您要为.NET平台开发编译器,您可能需要一些技巧解决方案,就像C#编译器使用的那样。我可以意识到一些核心实现使用extern构造函数,这是出于好的设计原因而在其他地方实现的。