Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
21-29.docx
Скачиваний:
1
Добавлен:
25.09.2019
Размер:
28.82 Кб
Скачать

24. Родительский главный класс System Object.

.Net Framework имеется специальный класс - Object. А еще точнее - System.Object. Этот класс является базовым для всех стандартных классов. Любой тип в C# - это, по сути, класс. Object это фундаментальный класс. Он определяет минимальный набор методов для объекта. Практически, все классы .Net Framework наследуют этот класс, и этот момент очень важен. Итак, класс System.Object определяет шесть открытых методов:

public virtual bool Equals(object object)

Этот метод определяет равенство вызывающего и передаваемого экземпляров.

public static bool Equals(object ob1,object ob2)

Этот метод определяет равенство объектов ob1 и ob2, передаваемых в качестве параметров. Метод Equals() перегружен, т.к. для него определено два разных контекста.

public virtual int GetHashCode()

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

public Type GetType()

Этот метод возвращает тип объекта.

public static bool ReferenceEquals(object ob1,object ob2)

Этот метод определяет равенство ссылок ob1 и ob2, т.е. ссылаются ли они на один экземпляр.

public virtual string ToString()

Этот метод возвращает строку с описанием объекта.

25. Перегрузка операций. Перегрузка операторов явного и неявного приведения типов.

Под перегрузкой операции понимается существование нескольких реализаций одной и той же операции. Большинство операций языка C# перегружены, т. е. одна и та же операция может применяться к операндам различных типов. Поэтому перед выполнением операции идет поиск реализации, подходящей для данных типов операндов. Заметим, что операции, как правило, выполняются над операндами одного типа. Если же операнды разных типов, то предварительно происходит неявное преобразование типа операнда. Оба операнда могут быть одного типа, но преобразование типов может все равно происходить - по той причине, что для заданных типов нет соответствующей перегруженной операции. Такая ситуация достаточно часто возникает на практике, поскольку, например, операция сложения не определена для младших подтипов арифметического типа.

26. Делегаты, групповые делегаты.

Делегат в языке C# исполняет роль указателя на метод. Делегат объявляется с использованием ключевого слова delegate. При этом указывается имя делегата и сигнатура инкапсулируемого метода. Модификаторы доступа при необходимости указываются перед ключевым словом delegate:

delegate double Function(double x);

public delegate void IntegerSub(int i);

Делегат – самостоятельный пользовательский тип, он может быть как вложен в другой пользовательский тип (класс, структуру), так и объявлен отдельно. Так как делегат – это пользовательский тип, то нельзя объявить два или более делегатов с одинаковыми именами, но разной сигнатурой.

После объявления делегата можно объявить переменные этого типа:

Function Y;

IntegerSub SomeSub;

Ключевой особенностью делегатов является то, что они могут инкапсулировать не один метод, а несколько. Подобные делегаты называются групповыми делегатами. При вызове группового делегата срабатывает вся цепочка инкапсулированных в нем методов.

Групповой делегат объявляется таким же образом, как и обычный. Затем создается несколько объектов делегата, и все они связывается с некоторыми методами. После этого используются перегруженные версии операций + или += класса System.Delegate для объединения делегатов в один групповой делегат. Для объединения можно использовать статический метод System.Delegate.Combine(), который получает в качестве параметров два объекта делегата (или массив объектов-делегатов) и возвращает групповой делегат, являющийся объединением параметров.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]