- •Эволюция языков программирования
- •Объектная декомпозиция.
- •Классы и объекты
- •Конструкторы и деструкторы.
- •Основные средства разработки классов
- •Описание класса в с#
- •Деструкторы
- •3.Методы-свойства
- •Наследование в c#
- •Интерфейсы, структуры, делегаты, события. Интерфейс.
- •Операции is и as
- •Стандартные интерфейсы .Net
- •Делегаты
Деструкторы
Вызывается сборщиком мусора перед удалением объекта из памяти
Деструктор выполняет действия, гарантирующие, что объект будет удален корректно.
[атрибуты] [extern] ~имя_класса()
{
Тело_деструктора
}
Всегда один
Не имеет параметров
Не возвращает значение
Не требует модификатора доступа
Не вызывается, а запускается автоматически при уничтожении объекта.
Методы-свойства
Метод Main()
индексаторы
3.Методы-свойства
для реализации принципа инкапсуляции
[Атрибуты] [Модификаторы] ТипСвойства
ИмяСвойства
{
[get (Код получения значения)]
[set (КодУстановкиЗначения)]
}
часть get или set может отсутствовать, но не оба одновременно
если отсутствует часть set, свойство доступно только для чтения
если отсутствует часть get, свойство доступно только для записи
Уровень доступа у set или get не может быть больше чем у всего свойства (например, свойство имеет уровень protected, а set - public
Метод get должен содержать оператор return, возвращающий выражение, соответствующее или приводимое к типу поля
В методе set используется параметр с именем value, который содержит устанавливаемое значение.
Метод Main()
Метод Main() – точка входа в программу
Может быть только одна точка
Если метод Main () несколько, нужно указать опцию компилятора /main: class
Project Properties – Application – Startup object
Метод Main () должна быть статическим
Возвращаемое значение – void или int
В среде Visual Studio параметры можно передавать следующим образом:
Project Properties – Debug – Start Options – Command line argument
Рекомендации:
Следует тщательно продумывать интерфейс: он должен быть полным и минимально необходимым
Как правильно, поля делаются закрытыми
Каждый метод должен решать только одну задачу
К проектированию полей и методов нужно подходить аккуратно – искать компромисс между скоростью и занимаемой памятью (использование поля при большом количестве объектов может привести к дополнительным расходам памяти)
Создание любого метода следует начинать с ее интерфейса, т.е заголовка (определить вход и выход метода)
Поля, характеризующие весь класс в целом, следует описывать как статические
Как правило, методы имеют небольшое количество параметров, поскольку они работают с полями класса, область видимости которых распространяется на методы.
Использовать перегрузку следует с осторожностью и обоснованно.
Наследование в c#
Чтобы справиться со сложностью, возникающей при работе со многими классами, используется иерархия классов.
Наследование обеспечивает упорядочивание структуры классов (упрощение откладки, модификации) и повторное использование кода(исключение повторений, создание новый программ на основе имеющихся)
Класс в С# может иметь произвольное количество потомков и только одного предка
Если имя предка не указано, предком считается базовый класс всей иерархии System.Object.
Public Demon (string name, int brain) : Base (вызываем конструктор предка с таким списком параметра)
Реализация наследования:
Поля, методы и свойства класса наследуются, поэтому если необходимо переопределить элемент класса, нужно указывать ключевое слово new
Тем не менее остается возможность вызова исходного метода, используя ключевое слово base
Виртуальные методы.
Абстрактные классы.
При создании иерархии объектов для исключения повторяющегося кода часто нужно выделять общие свойства в один родительский класс
При этом может оказаться, что создавать экземпляры такого класса не имеет смысла, потому что никакие реальные объекты им не соответствует.
Такие классы называют абстрактными
Абстрактный класс служит только для порождения потомков
Бесплодные классы
От них нельзя наследовать
Если необходимо использовать функциональность бесплодного класса, применяется не наследование, а вложение или включение: в классе описывается поле соответствующего типа (иерархия типа part of)
Класс Object
Является корневым для всей иерархии объектов NET
Можно указывать данный класс в качестве типа параметров методов, обеспечивая общность
Методы:
Метод Equalse с одним параметром возвращает значение true… Для ссылочных – ссылки, для значимых – сравнение.
Метод GetType возвращает текущий полиморфный тип объекта, то есть не тип ссылки, а тип объекта на который она в данный момент указывает. Возвращает значение имеет тип Typе.
Метод ReferenceEquals возвращает ссылки.
Метод ToString по умолчанию возвращает для ссылочных типов полное имя класса в виде строки, а для значимых – значение величины, преобразованное в строку.