Наследование в C#

Введение в наследование классов C#

Наследование – это механизм объектно-ориентированного программирования, позволяющий производным классам расширить или изменить функциональность базового класса. Базовый класс – класс от которого наследуется другой класс. Производный класс – тот который расширяет базовый класс.

Для пример создадим базовый класс – Point и производный класс Point3D, который будет расширять функциональность класса Point.

class Point {
    public int X;
    public int Y;
}

class Point3D : Point {
    public int Z;
}

Класс Point определяет два целочисленных поля классаX и Y. Класс Point3D наследуется от класса Point и получает все его открытые поля (X и Y). В дополнение к этому, в классе Point3D определяется еще одно поле – Z. Таким образом в классе Point3D теперь определены три поля – X, Y и Z.

Класс Point является базовым для класса Point3D. Класс Point3D является производным от класса Point.

Для того что бы унаследовать один класс от другого, нужно в определении производного класса через двоеточие (:) написать имя базового класса. В общем виде синтаксис наследования, применяемого в C#, выглядит так:

class Имя_Производного_Класса : Имя_Базового_Класса {
}

В C# допускается только одиночное наследование классов. Это значит, что у производного класса может быть только один базовый класс.


Доступность членов базового класса

Доступность членов базового класса зависит от модификаторов доступа, которые применены к этим членам.

Все члены базового класса с модификатором доступа public доступны без ограничений во всех производных классах.

Члены базового класса с модификатором доступа private полностью закрыты для доступа из производного класса.

Модификатор доступа protected закрывает член базового класса для доступа извне, однако, члены с таким модификатором доступны в любом производном классе.

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

При разработке собственной иерархии наследования классов важно помнить, что по умолчанию члены класса являются закрытыми (private).


Неявное наследование

Все типы C# неявно унаследованы от базового класса object. Следовательно, для каждого класса C# доступны члены базового класса object. Члены класса object, которые доступны любому типу C# благодаря механизму неявного наследования:

  • ToString – возвращает строку с именем типа, если не переопределен;
  • Equals – производит сравнение объектов;
  • GetType – возвращает объект Type, соответствующий типу объекта для которого вызван данный метод;
  • GetHashCode – возвращает хэш-код объекта;
  • MemberwiseClone – производит поверхностное копирование объекта;
  • Finalize – должен освобождать ресурсы объекта.

avatar
5000
  Подписаться  
Уведомление о