Ну, я не могу сказать, является ли это обязанностью базового класса или нет, и не попадет сюда в опасности контрактов на основе наследования.
В любом случае вы можете заставить некоторый класс переопределить метод - например, "Clone ()", сделав его чисто виртуальным членом абстрактного класса
public ref class ClonableBase abstract
{
public:
virtual void Clone() = 0;
}
обратите внимание на «абстрактный» и «= 0;». Аннотация позволяет классу содержать чистые виртуальные члены без предупреждения, а = 0; означает, что этот метод является чисто виртуальным, то есть он не содержит тела. Обратите внимание, что вы не можете создать экземпляр абстрактного класса.
Теперь вы можете
public ref class ClonableChild : public ClonableBase
{
public:
virtual void Clone();
}
void ConableChild::Clone()
{
//some stuff here
}
Если у вас нет переопределения Clone в ClonableChild, вы получите ошибку компилятора.