Реализация интерфейса, объявленного в C# от C++ / CLI

Это все о зависимостях. Если вам не нужны тесные связи и зависимости, вам не нужна абстрактная фабрика. Но это будет иметь значение, как только вы напишите приложение, которое нуждается в обслуживании.

34
задан Simon Brangwin 19 May 2009 в 04:35
поделиться

1 ответ

public ref class MyConcreteClass : public IMyInterface
{
 public:
  virtual void __clrcall Foo(String^ value) sealed;  

  virtual property String^ __clrcall MyProperty 
         { String^ get() sealed { String::Empty; } }
};

Интерфейсы должны быть определены как виртуальные. Также обратите внимание на "public IMy .." после отклонения класса, это немного отличается от синтаксиса C #.

Если вы можете, запечатайте элементы интерфейса для повышения производительности, компилятор сможет связать эти методы более жестко, чем типичные виртуальные элементы.

Надеюсь, что это поможет;)

Я не компилировал его, но выглядит хорошо для меня ... Да, а также определение ваших методов как __clrcall устраняет опасность двойных штрафов за производительность.

править правильный синтаксис для свойства:

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

или, при помещении определения в исходный файл:

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^ )
{
  //...
}
37
ответ дан 27 November 2019 в 17:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: