Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
гавно для печати.docx
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
171.17 Кб
Скачать

31. Абстрактные классы.

Иногда создают класс, определяющий своего рода пустой бланк. Производные классы этого базового класса должны «заполнить» бланк своей инфо. Такой класс не обеспечивает реализацию одного или нескольких методов. Он просто говорит о том, что будет метод с таким-то именем. Можно заставить производные классы переопределить методы, кот.в базовом не имеют никакого смысла. Для этого и служат абстрактные методы, кот.записываются: abstract Тип возврата Имя_ метода(сигнатуры);

абстрактный метод не содержит тела и, следовательно, не реализуется базовым классом. Поэтому производный класс должен его переопределить. Абстр.метод автоматически явл.виртуальным. поэтому virtual писать не надо. Примечание: 1.модификатор abstract использ. только для обычных методов, а не для static-методов. 2.свойства также могут быть абстрактными. 3.класс, содержащий 1 или несколько абстрактных методов д.б. объявлен как абстрактный (перед Class- abstract) 4.нельзя создавать объекты абстрактного класса,т.к. он полностью нереализуем.

Переопределение методов класса Object. Class Object явл.неявным базовым классом всех других классов и типов данных(int,long). Это зн., что переменные типа Object может указывать на объект любого типа. Этот класс имеет несколько методов. Например, метод Equals(Object Ob1, Object Ob2) определяет: является ли объект Ob1 таким же как объект Ob2, но он для получения результата вызывает перегруженный метод Equals (Object Ob), кот.определяет является ли вызывающий таким же как объект parameter, а точнее являются ли ссылки вызывающего объекта и объекта-аргумента одинаковыми. Когда сравниваются(==,!=) 2 объекта, то вызывается метод Equals из базового класса. По умолчанию он не знает объект какого класса к нему поступил. Поэтому в производном классе, где будут операторы сравнения, нужно переопределить методы Equals и GetHashCode() public override bool Equals(Object Ob)

{ if (!(Ob is Point)) return false; else return this==(Point)Ob; } Роль метода GetHashCode(): возвратить числовое значение, кот. идентифицирует объект в памяти в зависимости от его состояния. Если объекты по содержанию одинаковы, то у них будет одинаковый GetHashCode public override int GetHashCode()

{return ToString().GetHashCode(); }

32. Понятие интерфейса. Определение интерфейса.

В ООП иногда требуется определить, что класс должен делать?, а не как он будет делать. Один из механизмов реализации этой идеи – это абстрактные методы. Абстрактный метод определяет лишь сигнатуру, но не обеспечивает его реализацию. Т.о. абстрактный метод задает интерфейс для метода, но не способ его реализации, идея абстрактных классов и методов развив-ся далее путем отделения интерфейса класса от его реализации. Для этой цели и служат интерфейсы. интерфейсы позволяют объектам быть более обобщенными и гибкими. Класс может содержать ссылку на другой класс. Напр., в классе Otrezok им. ссылка Point B=new Point(); такое простое отношение наз. отношение СОДЕРЖИТ. Один класс может расширять другой класс с помощью наследования – это отношение ЯВЛЯЕТСЯ. Еще одно отношение МОЖЕТ_ИСПОЛЬЗОВАТЬСЯ_КАК. Интерфейс можно рассм.как класс-сервер, а др. классы, использующие его – классы-клиенты. Интерфейсы напоминают абстрактные классы, у кот.все члены явл. абстрактными, интерф. может сод-ть только объявления событий, методов, св-в и индексаторов, а их реализация должна нах-ся в классе, кот. реализует интерф. Интерф. не сод.констант, членов переменных, конструкторов, деструкторов и стат.членов. Когда интерф. определен, его может реализовать любое кол-во классов.при этом один класс может реализовать любое кол-во интерф. если какой-то метод интерф. не будет иметь реализацию, то компилятор выдаст ошибку. Кажд. член может определить собств.реализацию. Определение интерфейса. Интерф. Опред-ся с пом. Ключ. слова interface. Все члены интерф. по умолчанию счит-ся открытыми (public). Интерф. созд-ся в отдельных файлах .cs. меню Project-Add New Item-interface. Чтобы отличить интерф. от классов интерф. имеет префикс I. Форма определения: interface имя {Тип _возврата Имя_метода1(список параметров); Тип _возврата Имя_метода2(список параметров); //могут быть св-ва, события, индексаторы}.