簡體   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