![](/img/trans.png)
[英]C++/CLI : How do I declare abstract (in C#) class and method in C++/CLI?
[英]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.