Implementing an interface declared in C# from C++/CLI

前端 未结 1 1582
粉色の甜心
粉色の甜心 2020-12-06 03:47

Say I have a C# interface called IMyInterface defined as follows:

// C# code
public interface IMyInterface
{
  void Foo(string value);
  string          


        
相关标签:
1条回答
  • 2020-12-06 04:43
    public ref class MyConcreteClass : public IMyInterface
    {
     public:
      virtual void __clrcall Foo(String^ value) sealed;  
    
      virtual property String^ __clrcall MyProperty 
             { String^ get() sealed { String::Empty; } }
    };
    

    Interfaces need to be defined as virtual. Also note the "public IMy.." after the class decleration, it's a slighly different syntax than C#.

    If you can, seal the interface members to improve performance, the compiler will be able to bind these methods more tightly than a typical virtual members.

    Hope that helps ;)

    I did not compile it but looks good to me... Oh and also, defining your methods as __clrcall eliminates dangers of double thunk performance penalties.

    edit the correct syntax for a property is:

    public ref class MyConcreteClass : public IMyInterface
    {
     public:
      virtual property String^ MyProperty 
      {
        String^ get() sealed { return String::Empty; };
        void set( String^ s ) sealed { };
      }
    };
    

    or, when putting the definition in the source file:

    public ref class MyConcreteClass : public IMyInterface
    {
     public:
      virtual property String^ MyProperty 
      {
        String^ get() sealed;
        void set( String^ s ) sealed;
      }
    };
    
    String^ MyConcreteClass::MyProperty::get()
    {
      return String::Empty;
    }
    
    void MyConcreteClass::MyProperty::set( String^ )
    {
      //...
    }
    
    0 讨论(0)
提交回复
热议问题