如何将托管类的静态构造函数的主体放在类声明之外?该语法似乎是可编译的,但这是否真的意味着静态构造函数,或者仅仅是静态(=在翻译单元外部不可见)函数?

ref class Foo {
    static Foo();
}

static Foo::Foo() {}

最佳答案

是的,这是创建C ++ / CLI静态构造函数的正确语法。您可以知道它没有创建静态函数,因为这不是有效的函数声明语法。函数必须具有指定的返回类型。同样,如果编译器没有将Foo()链接到您在类定义中声明的构造函数,它会抱怨不是Foo类的成员。

您可以相当轻松地进行测试:

using namespace System;

ref class Foo {
    static Foo();
    Foo();
}

static Foo::Foo() { Console.WriteLine("Static Constructor"); }
Foo::Foo() { Console.WriteLine("Constructor"); }

int main(array<System::String ^> ^args)
{
    Foo ^f = gcnew Foo();
    Console.WriteLine("Main");
}


这将输出:


静态构造函数
建设者
主要

关于static - C++/CLI,类声明之外的静态构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3188164/

10-11 23:20
查看更多