Pull to refresh

Коротко о классах

На примере языка C#

Класс — абстрактный тип данных в объектно-ориентированном программировании (ООП).

Для начала необходимо познакомиться с тремя концепциями ООП:

* Инкапсуляция
* Наследование
* Полиморфизм

Классы состоят полей, методов и свойств.

Поле — переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях.
Метод — это процедура или функция для обработки данных класса.
Свойство — это интерфейс доступа к соответствующему полю класса.

В классах должен быть конструктор для инициализации полей класса и выделения памяти. Если он не объявлен, то используется конструктор по умолчанию без параметров. Однако если объявить в классе какой-либо конструктор, то конструктора по умолчанию в классе не будет. И если необходим конструктор без параметров, то его нужно объявить самостоятельно.

Почти каждому члену класса можно установить модификатор доступа (статический конструктор не может иметь модификатор доступа). В большинстве языков объектно-ориентированного программирования поддерживаются следующие модификаторы доступа:

* private (закрытый, внутренний член класса) — обращения к члену допускаются только из методов того класса, в котором этот член определён. Любые наследники класса уже не смогут получить доступ к этому члену;
* protected (защищённый, внутренний член иерархии классов) — обращения к члену допускаются из методов того класса, в котором этот член определён, а также из любых методов его классов-наследников.;
* public (открытый член класса) — обращения к члену допускаются из любого места в программе;
* internal — обращение к члену допускается только из той сборки, в которой класс объявлен;
* protected internal — обращение к члену допускается без ограничений в той сборке, в которой класс определён, а вне сборки — только в классах-наследниках.

Классы могут быть разбиты на несколько фрагментов. Для объявления таких классов используется модификатор partial.

Модификатор sealed обозначает, что класс «запечатан», и наследование этого класса запрещено. Большинство служебных классов объявлены с модификатором sealed (например, мы не можем наследовать от класса string)

Абстрактный метод объявляется с модификатором abstract — это обозначает, что данный метод не реализуется классом, однако должен быть реализован в классах-наследниках.

Члены класса могут быть статическими. Это значит, что доступ к этим членам осуществляется на уровне класса, а не объекта. Статические члены объявляются при помощи модификатора static.
Статические поля могут быть инициализированы в статическом конструкторе. Он вызывается CLR ДО создания объектов класса. В статическом конструкторе не могут быть инициализированы экземплярные члены класса.

Поля класса могут быть константными. Если поля объявлено с ключевым словом const, оно должно при объявлении получить какое-либо значение. Константные поля являются неявно статическими и доступны на уровне класса.
Поле может быть только для чтения. Оно объявляется при помощи ключевого слова readonly. Поля только для чтения, в отличии от полей-констант, могут быть инициализированы в конструкторе класса.

В целях обеспечения полиморфизма, методы класса могут быть виртуальными. Они объявляются при помощи модификатора virtual. В классах-наследниках виртуальные методы могут быть переопределены, используя модификатор override. При описании метода возможно совместное указание модификаторов new и virtual. Такой приём создаёт новую полиморфную цепочку замещения.

Классы могут быть абстрактными и статическими.

Абстрактный класс — это класс, содержащих хотя бы один абстрактный метод. Также допустимо объявить любой класс абстрактным, даже если в нём нет абстрактных методов, именно для запрещения создания экземпляров.
Абстрактный класс объявляется при помощи ключевого слова abstract.
Создавать экземпляры абстрактного класса запрещено.
Статический класс — это класс, у которого все методы статические. Объявляется при помощи ключевого слова static.
Нельзя создавать экземпляры статического класса.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.