在 C# 和 VB.Net 中,我可以使用CallerMemberNameAttribute将调用者的名称作为字符串获取:
public void Caller([CallerMemberName]string memberName = "")
{
Debug.Print(memberName);
}
我想在 C++/CLI 中做同样的事情,但不知何故我无法让它工作。尝试了几种结构,我开始怀疑 C++/CLI 编译器是否支持这个属性。
这是一个(简化的)实现:
using namespace System::Runtime::CompilerServices;
public ref class InvokeExample
{
Invoke([CallerMemberName][Optional]String^ name)
{
Debug::Print(name);
}
}
在 C# 应用程序中调用此方法时,name 的值为 null。也尝试使用属性DefaultParameterValue但它也没有帮助。现在没有想法了。
显而易见的答案是,为什么不在 C# 中实现呢?好吧,在这种特定情况下,我仅限于 C++/CLI。