Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Лекция!2.doc
Скачиваний:
7
Добавлен:
26.09.2019
Размер:
256 Кб
Скачать
  1. Деструкторы

  • Вызывается сборщиком мусора перед удалением объекта из памяти

  • Деструктор выполняет действия, гарантирующие, что объект будет удален корректно.

[атрибуты] [extern] ~имя_класса()

{

Тело_деструктора

}

  • Всегда один

  • Не имеет параметров

  • Не возвращает значение

  • Не требует модификатора доступа

  • Не вызывается, а запускается автоматически при уничтожении объекта.

  1. Методы-свойства

  2. Метод Main()

  3. индексаторы

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 по умолчанию возвращает для ссылочных типов полное имя класса в виде строки, а для значимых – значение величины, преобразованное в строку.