Это все о зависимостях. Если вам не нужны тесные связи и зависимости, вам не нужна абстрактная фабрика. Но это будет иметь значение, как только вы напишите приложение, которое нуждается в обслуживании.
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^ )
{
//...
}