double arrow

Функциональные замыкания


Класс object

Корневой класс System.Object всей иерархии объектов .NET, называемый в С# object, обеспечивает всех своих наследников несколькими важными методами. Производные классы могут использовать эти методы непосредственно или переопределять их.

Класс object часто используется и непосредственно при описании типа параметров методов для придания им общности, а также для хранения ссылок на объекты различного типа. Таким образом реализуется полиморфизм.

Открытые методы класса System.Object перечислены ниже.

• Метод Equals с одним параметром возвращает значение true, если параметр и вызывающий объект ссылаются на одну и ту же область памяти. Синтаксис:

public virtual bool Equals( object obj );

• Метод Equals с двумя параметрами возвращает значение true, если оба параметра ссылаются на одну и ту же область памяти. Синтаксис:

public static bool Equals( object obi, object ob2 );

• Метод GetHashCode формирует хеш-код объекта и возвращает число, однозначно идентифицирующее объект. Это число используется в различных структурах и алгоритмах библиотеки. Если переопределяется метод Equals, необходимо перегрузить и метод GetHashCode. Синтаксис: public virtual int GetHashCode();

• Метод GetType возвращает текущий полиморфный тип объекта, то есть не тип ссылки, а тип объекта, на который она в данный момент указывает. Возвращаемое значение имеет тип Туре. Это абстрактный базовый класс иерархии, использующийся для получения информации о типах во время выполнения. Синтаксис: public Type Get Туре ();

• Метод ReferenceEquals возвращает значение true, если оба параметра ссылаются на одну и ту же область памяти. Синтаксис:

public static bool( object obi, object ob2 );

• Метод ToString по умолчанию возвращает для ссылочных типов полное имя класса в виде строки, а для значимых — значение величины, преобразованное в строку. Этот метод переопределяют для того, чтобы можно было выводить информацию о состоянии объекта. Синтаксис: public virtual string ToString().

В производных объектах эти методы часто переопределяют. Например, можно переопределить метод Equals для того, чтобы задать собственные критерии сравнения объектов, потому что часто бывает удобнее использовать для сравнения не ссылочную семантику (равенство ссылок), а значимую (равенство значений).

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

Вступление

Операции…

Заключение

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

Подобная атомарная последовательность чрезвычайно распространена в Windows. Рассмотрим пример отображения всплывающего окна:

Сохранение координат области, покрываемой окном // вступление

Отображение всплывающего окна // операция: отображение

Восстановление закрытого изображения // заключение

Этот пример раскрывает смысл функционального замыкания как области кода, ограниченной вступлением и заключением. Функциональные замыкания имеют смысл только во время выполнения. Если функциональное замыкание имеет функцию вступления, но не имеет соответствующей функции заключения, то это приведёт к ошибке во время выполнения. Вступление и заключение представляют собой как операторные скобки выполняемого кода, которые играют роль, подобную той, какую играют фигурные скобки в исходном коде С#.


Сейчас читают про: