Или даже вы можете перейти к интерфейсу, хотя требуется небольшое ограничение:
public interface IControllable
{
void Move(int step);
void Backward(int step);
}
public interface ITurnable
{
void TurnLeft(float angle);
void TurnRight(float angle);
}
public class Airplane : IControllable, ITurnable
{
void Move(int step)
{
// TODO: Implement code here...
}
void Backward(int step)
{
// TODO: Implement code here...
}
void TurnLeft(float angle)
{
// TODO: Implement code here...
}
void TurnRight(float angle)
{
// TODO: Implement code here...
}
}
Однако вам придется реализовать все объявление функций как IControllable
, так и ITurnable
присвоили, иначе произойдет ошибка компилятора.Если вы хотите опциональную виртуальную реализацию, вам придется пойти abstract class
для виртуального метода с interface
для чисто виртуального метода.
На самом деле, есть разница между функцией interface
и abstract
, что interface
только объявляет функцию , все функции interface
должны быть общедоступными, поэтому здесь нет таких причудливых свойств класса, как private
или protected
, поэтому они очень быстрые, тогда как функция abstract
являются фактическим методом класса без реализации и заставляет реализацию в производном классе , поэтому вы можете поместить private
, protected
и получить доступ к переменным-членам с помощью функций abstract
, а большинствовремени это медленнее, потому что отношения наследования классов анализируются во время выполнения .(он же vtable)