C# 构造函数 extern 修饰符的目的

13

C# 构造函数中 extern 修饰符的目的是什么?

我知道 extern 方法用于调用 Win32 函数,但构造函数呢?

请给出一个实际的例子。

注意:

class MyClass
{
    public extern MyClass();
}

1
请举个例子说明您的意思。 - Lasse V. Karlsen
我认为MSDN版本的定义和示例会有所帮助?http://msdn.microsoft.com/en-us/library/e59b22c5%28VS.80%29.aspx - o.k.w
1
但这在构造函数上不起作用,也许这就是他的问题,但我不确定,因此我希望他能详细说明。 - Lasse V. Karlsen
@Lasse:在C#规范的第10.11段中,实例构造函数可以使用extern关键字:“当构造函数声明包含extern修饰符时,该构造函数被称为外部构造函数。因为外部构造函数声明不提供实际实现,所以它的构造函数体由一个分号组成。对于所有其他构造函数,构造函数体由一个块组成,其中指定了初始化类的新实例的语句。” - yeyeyerman
好的,那对我来说是未知的。我不明白这该如何工作,因为你实际上无法实现构造函数。我怀疑这与在其他地方使用IL生成代码有关,在任何情况下,我删除了我的错误答案。 - Lasse V. Karlsen
@Lasse,根据我刚刚添加的答案,如果你碰巧已经编写了CLR,则它可以正常工作 ;) - Rob
2个回答

6

我认为 extern 构造函数的一个用途是在 CLR 自身中实现构造函数。如果你使用 Reflector 反汇编 mscorlib.dll 并查看 System.String 类型,你会看到:

[MethodImpl(MethodImplOptions.InternalCall)]
public extern String(char[] value);

这基本上告诉我们,string类的(char[])构造函数是在.net运行时作为外部实现实现的。


1

c#规范这里指出,除了private、internal、protected和public之外,extern也可以使用,并且这是标准的外部引用-请参见这里。对我来说,这意味着构造函数在稍后链接到类中。就像PInvoke调用一样。我猜想,没有什么阻止c#编译器实现者允许链接包含这些外部构造函数的外部.net .modules。

我无法给出示例,但我怀疑一种方法是在MC++中实现构造函数,或者实际上只是一个简单的IL .module。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接