tags:

views:

1007

answers:

1

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

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

Assume I also have a C++/CLI class, MyConcreteClass, that implements this interface and whose header is declared as follows:

// C++/CLI header file
ref class MyConcreteClass : IMyInterface
{
public:

};

How does one implement the method Foo and the property MyProperty in the C++/CLI header?

My attempt results in the following compile error:

error C3766: 'MyConcreteClass' must provide an implementation for the interface method 'void IMyInterface::Foo(System::String^ value)'

+6  A: 
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.

RandomNickName42
Thanks for that. Does the MyProperty declaration not require the 'property' keyword? Eg... virtual property String^ MyProperty { String^ __clrcall get() sealed { return String::Empty; } }
Simon Brangwin
Thanks Simon, I must of been cross eye'd from this marathon 30hour coding stretch!! =)
RandomNickName42