5. class имя класса: список_базовых_классов
{список_компонентов_класса};
6. Поскольку конструкторы не наследуются, при создании производного класса наследуемые им данные-члены должны инициализироваться конструктором базового класса. Конструктор базового класса вызывается автоматически и выполняется до конструктора производного класса. Если наследуется несколько базовых классов, то их конструкторы выполняются в той последовательности, в которой перечислены базовые классы в определении производного класса. Конструктор производного класса вызывается по окончании работы конструкторов базовых классов. Параметры конструктора базового класса указываются в определении конструктора производного класса. Таким образом происходит передача аргументов от конструктора производного класса конструктору базового класса.
public class A
{
public virtual void DoWork ()
{
Console.WriteLine("class A");
}
}
public class B: A
{
public override void DoWork ()
{
Console.WriteLine("class B");
}
}
Здесь есть 2 класса: A — предок, B — потомок. В классе A объявлен метод
public virtual void DoWork ()
ключевое слово virtual говорит о том, что этот метод может быть переопределен в потомке
для доступа к реализации метода родительского класса в классе-наследнике используется кейворд base.
Например
class SomeClass
{
public virtual void DoSomething()
{
Console.WriteLine("base realization action");
}
}
class Derivative : SomeClass
{
public override void DoSomthing()
{
Console.WriteLine("some overrided action");
base.DoSomething(); //Вызываем реализацию этого метода у базового класса
}
}
class Test
{
static void Main(string[] Args)
{
Derivative e = new Derivative();
e.DoSomething();
}
}
Консольный вывод:
some overrided action
base realization action
То бишь, в этом примере при вызове переопределённого метода на выходе мы получили не только то, что и определили в производном классе, но и результат, возвращённый базовой реализацией вызванного метода.