在基础 class 中创建派生 class 实例

Create derived class instance in base class

有没有办法从基础 class 创建派生 class 实例?

如果我尝试这样的代码

public ref class Foo
    {
    static Bar^ Create () { return gcnew Bar (); }
    };

public ref class Bar : Foo {};

我收到一个错误

error C2143: syntax error : missing ';' before '^'

如果我尝试更改这些定义的位置:

public ref class Bar : Foo {};

public ref class Foo
    {
    static Bar^ Create () { return gcnew Bar (); }
    };

我收到一个错误

error C2504: 'Foo' : base class undefined

C++/CLI 编译器与 C++ 编译器具有相同的限制。它是单程编译器,所有声明在使用前必须已知。你将不得不跳过你在 C++ 中所做的同一个箍,你必须编写一个 前向声明 :

ref class Bar;              // Forward declaration

public ref class Foo
{
    static Bar^ Create();   // Can't be inline anymore
};

public ref class Bar : Foo {};

好了,所有定义都可用了:

Bar^ Foo::Create() {
    return gcnew Bar; 
}

Fwiw:不能再内联定义 Create() 函数不会有任何损失。内联代码是抖动的工作,并且总是内联像 Create() 这样的小方法。