繁体   English   中英

如何在C ++ / CLI中声明一个在C#中被视为扩展方法的方法?

[英]How do I declare a method in C++/CLI that will be seen as an extension method in C#?

我正在用C ++ / CLI编写.NET程序集,以便在我们基于C#的应用程序中使用。 我希望应用程序将一些C ++方法看作扩展方法。 是否有一些属性可以应用于声明,以指定方法应该被视为C#的扩展方法?

我遇到了同样的问题,这是C ++ / CLI中扩展方法的一个小例子:

using namespace System;

namespace CPPLib 
{
    [System::Runtime::CompilerServices::Extension]
    public ref class StringExtensions abstract sealed
    {
    public: 
        [System::Runtime::CompilerServices::Extension]
        static bool MyIsNullOrEmpty(String^ s)
        {
            return String::IsNullOrEmpty(s);
        }
    };
}

这个扩展方法可以像C#中的任何其他方法一样使用:

using CPPLib;

namespace CShartClient
{
    class Program
    {
        static void Main( string[] args )
        {

            string a = null;
            Console.WriteLine( a.MyIsNullOrEmpty() ? "Null Or Empty" : "Not empty" );
            a = "Test";
            Console.WriteLine( a.MyIsNullOrEmpty() ? "Null Or Empty" : "Not empty" );
            Console.ReadKey();
        }
    }
}

不幸的是,似乎C ++并没有像C#那样为我们提供“语法糖”。 至少我没有找到它。

使其成为非嵌套非泛型静态类中的静态方法,并将Extension属性应用于类和方法。

这里棘手的一点可能是静态类的概念 - 在C ++ / CLI中可能不存在......我不确定。 有可能C#编译器在检测扩展方法时并不真正关心该类是否是静态的,只有在声明扩展方法时才是这样。 没有它,这当然值得一试。

我认为你不能。 扩展方法只是语法糖,由编译器转换为静态方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM