从C++/CLI 托管访问 C# 重载方法

Access C# overloaded method from C++/CLI managed

本文关键字:访问 重载 方法 C++ CLI      更新时间:2023-10-16

我有带接口的 C# 类库

public interface IInterface
{
    public IObject Get(SomeClass a);
    public IObject Get(SomeClass a, SomeClass1 b);
    public IObject Get(SomeClass a, SomeClass2 c);
}

在我的C++托管代码中,我需要使用 SomeClass2 arg 调用第三种方法。但是VS给我显示一个错误

cannot convert parameter 2 from 'SomeClass2 ^' to 'SomeClass1 ^'

是否可以从C++调用重载方法?

我这样做没有任何问题(不能把它放在评论中):

namespace ClassLibrary1
{
   public class SomeClass {}
   public class SomeClass1 {}
   public class SomeClass2 {}
   public interface IInterface
   {
      object Get(SomeClass a);
      object Get(SomeClass a, SomeClass1 b);
      object Get(SomeClass a, SomeClass2 c);
   }
   public class Implementation : IInterface
   {   
      public object Get(SomeClass a)
      {
         return null;
      }
      public object Get(SomeClass a, SomeClass1 b)
      {
         return null;
      }
      public object Get(SomeClass a, SomeClass2 c)
      {
         return null;
      }
   }
}

和 C++/CLI 代码

using namespace System;
using namespace ClassLibrary1;
int main(array<System::String ^> ^args)
{
   auto o = gcnew Implementation();
   o->Get(gcnew SomeClass());
   o->Get(gcnew SomeClass(), gcnew SomeClass1());
   o->Get(gcnew SomeClass(), gcnew SomeClass2());
    Console::WriteLine(L"Hello World");
    return 0;
}

编译没有问题。

其中一个

参数是 System::D ateTime 的问题,它是值类型,在我的代码中我将其声明为引用

System::Date^ date = ...

当我更改它时,它确实是值类型,可以调用任何方法。为什么它调用没有任何问题的方法与引用类型日期时间我不知道