c#中与参数DateTime ^A等价的是什么?



我有一个由c++/CLI和c#代码混合组成的大应用程序。在重构的过程中,我想用c#创建一个接口,它将被c++/CLI继承。没问题,我以前做过很多次了。但是我对这个新接口的方法签名有一个问题。从它继承的c++类有如下的方法:

void MethodName(DateTime ^A)

如果DateTime是c#中的引用类型,我可以用这个替换上面的签名。

void MethodName(DateTime A)

出现这个问题是因为DateTime是一个值类型。但是,它是通过句柄访问的。句柄是c++/CLI的概念,我不知道如何把它翻译成c#。

谁能告诉我c#中需要什么方法签名来解决这个问题?

在c++/CLI中没有直接等价于DateTime^的c#。这种类型的参数在c#中不存在。

ref DateTime是接近的,但这将是DateTime%在c++/CLI,而不是DateTime^

如果可以修改包含DateTime^的源代码,请将其更改为DateTimeDateTime%。可能原作者没有意识到DateTime不需要^,所以他们可能只是将该参数用作常规的按值参数,而不是按引用参数。无论你如何改变它,它都可以很容易地从c#中调用。

这是不可能的

ILDasm显示此方法编译为

void MethodName (
    class [mscorlib]System.ValueType
    modopt([mscorlib]System.DateTime)
    modopt([mscorlib]System.Runtime.CompilerServices.IsBoxed) 
    A
) cil managed 

在c#中是不可能表示的(你不能编码任意的modopt值;这些不是属性)

为什么不直接使用没有^的DateTime ?我不知道使用句柄有什么好处,因为DateTime对象是不可变的,而且很小。

这是一个引用,在c#中你应该使用关键字ref:

void MethodName(ref DateTime A)

最新更新