12

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

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

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

而且我也知道相当深奥的外部构造函数(另见这个问题)。例如,String类有几个这样的声明,这些构造函数是由运行时实现的。

但是外部静态构造函数有真正的用途吗?我搜索了coreclr repo,一无所获。语言规范无法描述一些从未在野外使用过的构造。或者可以吗?

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

4

1 回答 1

1

来自 MSDN:

当构造函数声明包含 extern 修饰符时,构造函数被称为外部构造函数。因为外部构造函数声明不提供实际实现,所以它的构造函数体由分号组成。

...

似乎我们想不出使用这个声明的充分理由,而且它肯定是正确的。但是,当您进一步挖掘时,您会发现整个世界都是动态组装或 -代码生成。

如果您要为 .NET 平台开发编译器,您可能需要像 C# 编译器使用的一些诡计解决方案。我可以意识到,一些核心实现使用外部构造函数,出于良好的设计原因,该构造函数在其他地方实现。

于 2017-03-20T14:19:39.377 回答