如何通过C++/CLI创建.Net扩展方法?

KiK*_*iKi 21 .net extension-methods c++-cli

在C#中,可以通过创建扩展方法

public static class MyExtensions {
    public static ReturnType MyExt(this ExtType ext) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我的所有库都是用C++/CLI编写的,我想在C++/CLI中创建.net扩展方法(为了拥有一个DLL而不是两个).我试过以下代码

static public ref class MyExtensions {
public:
    static ReturnType^ MyExt(this ExtType ^ext) {
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

但编译器无法在第一个参数中识别关键字"this".

error C2059: syntax error: 'this'
Run Code Online (Sandbox Code Playgroud)

有没有办法在C++/CLI中创建扩展方法?

Tob*_*nen 41

您只需使用ExtensionAttribute修饰方法和包含类:

using namespace System::Runtime::CompilerServices;
...

[ExtensionAttribute]
public ref class MyExtensions abstract sealed {
    public:        
        [ExtensionAttribute]
        static ReturnType MyExt(ExtType ^ext) {
            ...
        }
};
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供名称空间 - 很多时候人们(否则会有帮助)会错过这个. (14认同)
  • 您还应该使用[assembly:ExtensionAttribute]标记程序集.我个人会将此添加到AssemblyInfo.cpp. (3认同)