c#中与参数DateTime ^A等价的是什么?
本文关键字:是什么 参数 DateTime | 更新日期: 2023-09-27 18:15:18
我有一个由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^
的源代码,请将其更改为DateTime
或DateTime%
。可能原作者没有意识到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)