
- •Классы и структуры в c#. Класс Object, его методы.
- •Объявление и вызов методов класса.
- •Вызов методов:
- •Конструктор и деструктор класса.
- •Отношение наследования, объявление класса-потомка.
- •Создание экземпляров класса-потомка, взаимодействие конструкторов родителя и потомка.
- •Три способа изменения методов класса-родителя в классе-потомке.
- •Статическое и динамическое связывание
- •Полиморфизм. Три механизма реализации полиморфизма.
- •16. Абстрактные классы. Абстрактные классы
- •17. Интерфейсы, объявления интерфейсов.
- •18. Члены интерфейсов.
- •Реализация интерфейсов
Классы и структуры в c#. Класс Object, его методы.
Типы данных – это классы:
Язык C# в большей степени, чем язык C++, является языком объектного программирования
Это выражается в том, что в языке C# сглажено различие между типом и классом: все типы - встроенные и пользовательские - одновременно являются классами, связанными отношением наследования
Класс Object:
Родительским, базовым классом является класс Object; все остальные типы или, точнее, классы являются его потомками, наследуя методы этого класса
У класса Object есть четыре наследуемых метода: Equals, GetType, ToString, GetHashCode
Методы класса Object:
bool Equals (object obj) - проверяет эквивалентность текущего объекта и объекта, переданного в качестве аргумента;
System.Type GetType () - возвращает системный тип текущего объекта;
string ToString () - возвращает строку, связанную с объектом. Для арифметических типов возвращается значение, преобразованное в строку;
int GetHashCode() - служит как хэш-функция в соответствующих алгоритмах поиска по ключу при хранении данных в хэш-таблицах
Объявление и описание класса. Модификаторы доступа.
Объявление классов Производится так же, как и в языке C++, а именно:
[атрибуты] [модификаторы] class имя_класса [:список_родителей]
{
тело_класса
}
Модификаторы предназначены для уточнения определения класса
С их помощью можно определить области видимости класса, возможность его наследования, готовность к работе всего класса и отдельных методов
Модификатор |
Пояснение |
public |
Класс доступен из любой точки программы (доступ по умолчанию) |
protected |
Класс доступен только его потомкам |
internal |
Класс доступен в сборке, в которой он определен |
private |
Вложенный класс доступен только внутри содержащего его класса |
sealed |
Класс не может иметь наследников |
abstract |
Класс обязательно должен перекрываться в потомках |
Уровни доступности и уровни принадлежности членов класса.
Как и класс в целом, отдельные его члены характеризуются уровнем доступности, который задается с помощью следующих модификаторов:
public – открытые члены класса,
protected – защищенные члены класса,
private – закрытые члены класса,
internal – внутренние члены класса,
Смысл этих модификаторов тот же, что и в случае классов
Члены класса характеризуется уровнем принадлежности, который может быть:
уровнем принадлежности классу
уровнем принадлежности экземпляру класса
Уровень принадлежности классу задается модификатором static в объявлении соответствующего члена класса
Данные-члены класса.
Данные-члены содержат данные класса — поля, константы, события
Данные-члены могут быть статическими (static); говорят, что такое данное принадлежит уровню класса
Если член класса не объявлен явно как static, то он является членом экземпляра класса (принадлежит уровню экземпляра)
Поля класса:
Поля (field) — это переменные, входящие в состав класса
После создания экземпляра класса к его полям можно обращаться с использованием синтаксиса Объект.ИмяПоля, например
PhoneCustomer Customer1 = new PhoneCustomer();
Customer1.FirstName = "Simon";
Константы класса:
Константы могут быть ассоциированы с классом тем же способом, что и переменные
Константа объявляется с помощью ключевого слова const, например
class PhoneCustomer
{
public const string DayOfSendingBill = "Monday";
public int CustomerlD;
}
События класса:
События (events) — это члены класса, позволяющие объекту уведомлять вызывающий код о том, что случилось нечто достойное упоминания, например, изменение свойства класса либо некоторое взаимодействие с пользователем
Клиент может иметь код, известный как обработчик событий, реагирующий на них.
Объявление полей и констант.
Аналогично объявлению переменных:
[модификаторы] имя_типа имя_поля [=инициализирующее_выражение]
Инициализирующее выражение может содержать литералы, имена констант и статических полей, например
private float len = 2*Pi*r;
Здесь Pi – константа, r – статическое поле
Константы (constants) – это данные-члены, значения которых устанавливаются на этапе компиляции и не могут быть изменены в процессе выполнения программы
Константы объявляются с модификатором const и инициализируются константными выражениями
Константы являются статическими по умолчанию
Функции-члены класса.
Функции-члены — это члены класса, которые обеспечивают возможность манипулирования данными класса
В число функций-членов входят:
методы,
свойства,
конструкторы,
финализаторы,
операции,
индексаторы
Методы класса:
Методы (methods) — это функции, ассоциированные с определенным классом
Как и данные-члены, по умолчанию они являются членами экземпляра
Они могут быть объявлены статическими с помощью модификатора static
Свойства класса:
Свойства (property) — это наборы функций чтения и записи для закрытых полей класса
В языке С# предусмотрен специальный синтаксис для реализации свойств, поэтому писать собственные методы с именами, начинающимися на Set и Get, не понадобится
Конструкторы класса:
Конструкторы (constructor) — это специальные функции, вызываемые автоматически при инициализации объекта
Имена конструкторов совпадают с именами классов, которымони принадлежат, и они не имеют типа возврата
Конструкторы полезны для инициализации полей класса
Финализаторы класса:
Финализаторы (finalizer) похожи на конструкторы, но вызываются, когда среда CLR определяет, что объект больше не нужен
Они имеют то же имя, что и класс, но с предшествующим символом тильды (~)
Предсказать точно, когда будет вызван финализатор, невозможно
Операции и индексаторы класса:
Операции (operator) — это функции-члены, переопределяющие способ выполнения существующих операций применительно к объектам данного класса (так называемая перегрузка операций)
Индексаторы (indexer) позволяют индексировать объекты таким же способом, как массив или коллекцию.