什么是C#CLI中的C#动态关键字等价物?

时间:2013-03-12 11:23:00

标签: c# .net visual-c++ c++-cli

有两个项目,一个是C ++ CLI,另一个是C# C#项目引用了C ++ CLI项目。

在C#中我想这样做:

//method signature is somemethod(dynamic data);
somemethod("haaaii");

现在C ++ CLI项目中的方法必须处理这个问题。

如何在C ++ CLI中声明此方法?
另外如何在C ++ CLI中检测数据类型?

2 个答案:

答案 0 :(得分:6)

获取C#看作dynamic的方法签名:

void TestMethod( [System::Runtime::CompilerServices::DynamicAttribute] System::Object^ arg )
{
}

但如果你只是想接受所有类型,你可以简单地使用System::Object^。该属性具有误导性,因为它暗示了您将很难提供的语义。

要发现实际数据类型,请使用arg->GetType()。然后,您可以使用反射和/或DLR的所有功能在运行时发现和调用成员。

稍微有用的是在返回类型上使用该属性,因为当使用dynamic关键字时,C#将推断var语义。

[returnvalue: System::Runtime::CompilerServices::DynamicAttribute]
System::Object^ TestReturn( void )
{
    return 1;
}

答案 1 :(得分:0)

您可能必须使用System::Dynamic::DynamicObject类型

获得动态效果

void somemethod(ref System::Dynamic::DynamicObject data) { }