0

我有带接口的 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++ 调用重载方法?

4

2 回答 2

3

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

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;
}

编译没有问题。

于 2013-11-07T14:16:23.907 回答
1

参数之一是 System::DateTime 的问题,它是值类型,在我的代码中我将其声明为参考

System::Date^ date = ...

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

于 2013-11-08T11:13:50.423 回答