
- •Лекции по курсу "Технология программирования" (1-й семестр) Оглавление
- •Технология .Net Предыдущее состояние дел.
- •Главные компоненты платформы .Net (clr, cts и cls)
- •Общеязыковая среда выполнения (clr)
- •О бщая система типов и общеязыковые спецификации (cts и cls)
- •Библиотека базовых классов
- •Роль языка с#
- •Компоновочные блоки
- •Роль метаданных типов .Net
- •Роль манифеста компоновочного блока
- •Общая система типов.
- •Объектно-ориентированное программирование
- •Главные элементы объектно-ориентированного подхода
- •Дополнительные элементы ооп
- •Принципы объектно-ориентированного программирования.
- •Классы Инкапсуляция
- •Объект (экземпляр класса).
- •Ключевое слово this
- •Отношения между объектами.
- •Основные отличительные особенности класса
- •Спецификаторы доступа
- •Состав класса
- •Поля класса
- •Доступ к полям
- •Статические и экземплярные переменные
- •Методы (функции-члены класса)
- •Переменное число параметров метода
- •Статические методы
- •Конструкторы
- •Закрытые конструкторы или классы без экземпляров
- •Статические конструкторы.
- •Деструкторы
- •Абстрактные методы и классы.
- •Свойства
- •Индексаторы
- •Статические классы
- •Частичные классы
- •Рекомендации по программированию
- •Наследование Понятие наследования в программировании
- •Типы наследования
- •Наследование реализации
- •Определение наследующих классов
- •Уровень доступа protected и internal
- •Ссылка на объект базового класса
- •Протоклассы
- •Предотвращение наследования с помощью ключевого слова sealed.
- •Отношения между классами
- •Абстрактные классы.
- •Класс object
- •Функциональные замыкания
- •Разработка функциональных замыканий с помощью наследования
- •Разработка функциональных замыканий с помощью экземпляров класса
- •Заключение.
- •Полиморфизм
- •Полиморфизм наследующих классов.
- •Переопределение методов родительского класса. Раннее связывание.
- •Виртуальные методы и их переопределение.
- •Как вызывают виртуальные методы
- •Виртуальные функции и принцип полиморфизма
- •Перегрузка.
- •Перегруженные конструкторы
- •Рекомендации программисту.
Класс 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. Рассмотрим пример отображения всплывающего окна:
Сохранение координат области, покрываемой окном // вступление
Отображение всплывающего окна // операция: отображение
Восстановление закрытого изображения // заключение
Этот пример раскрывает смысл функционального замыкания как области кода, ограниченной вступлением и заключением. Функциональные замыкания имеют смысл только во время выполнения. Если функциональное замыкание имеет функцию вступления, но не имеет соответствующей функции заключения, то это приведёт к ошибке во время выполнения. Вступление и заключение представляют собой как операторные скобки выполняемого кода, которые играют роль, подобную той, какую играют фигурные скобки в исходном коде С#.