c#动态关键字在c++ CLI中的等效是什么?

本文关键字:是什么 CLI 动态 关键字 c++ | 更新日期: 2023-09-27 18:03:42

有两个项目,一个是c++ CLI,另一个是c#。
c#项目参考了c++ CLI项目。

在c#中我想这样做:

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

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

如何在c++ CLI中声明这个方法?
还如何检测数据类型在c++ CLI ?

c#动态关键字在c++ CLI中的等效是什么?

获取c#视为dynamic的方法签名:

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

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

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

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

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

您可能需要动态使用System::Dynamic::DynamicObject类型

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