51471

Отношения между классами. Интерфейсы, делегаты и события

Лекция

Информатика, кибернетика и программирование

Отношения между классами. Понятие отношения между классами. Классы с событиями. Обработчик события: всегда принадлежит классу зажигающему событие; никогда не принадлежит классу зажигающему событие; может принадлежать классу зажигающему событие; принадлежит только одному классу слушающему событие; может принадлежать многим классам слушающим события. Отметьте истинные высказывания: все события имеют одинаковую сигнатуру из двух аргументов с одними и теми же типами; все события имеют сигнатуру из двух аргументов но с...

Русский

2014-02-11

40.52 KB

8 чел.

Тема 5.4. Отношения между классами.
Интерфейсы, делегаты и события

5.4.1. Понятие отношения между классами

5.4.2. Отношение вложенности

5.4.3. Наследование

5.4.3. Статический контроль типов и динамическое связывание

5.4.4. Пример работы с полиморфным семейством классов

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

5 .4.6. Интерфейсы

5.4.7. Проблемы множественного наследования

5.4.8. Встроенные интерфейсы

5. 5.1.  Как определяется функциональный тип, и как появляются его экземпляры

5.5.2. Функции высших порядков

5.5.3. Наследование и полиморфизм – альтернатива обратному вызову

5.5.4. Делегаты как свойства

5.5.5. Операции над делегатами. Класс Delegate

Пример «Комбинирование делегатов»

5.5.6. Классы с событиями

Вариант 1

Обработчик события:

всегда принадлежит классу, зажигающему событие;

никогда не принадлежит классу, зажигающему событие;

может принадлежать классу, зажигающему событие;

принадлежит только одному классу, слушающему событие;

может принадлежать многим классам, слушающим события.

Отметьте истинные высказывания:

все события имеют одинаковую сигнатуру из двух аргументов с одними и теми же типами;

все события имеют сигнатуру из двух аргументов, но с отличающимися типами;

все события, не имеющие собственных аргументов, передаваемых обработчику, соответствуют стандартному встроенному делегату EventHandler;

для класса с большим числом событий целесообразно применять динамическое связывание;

для связывания событий с обработчиком можно применять только операцию +=.

Объявление события в классе может представлять собой:

объявление метода класса;

объявление поля класса;

объявление процедуры-свойства класса с методами get и set;

объявление процедуры-свойства класса с методами add и remove.

Вариант 2

Объекты одного класса:

имеют одинаковый набор событий;

в процессе вычислений зажигают одинаковый набор событий;

в процессе вычислений зажигают набор событий, характерный для объекта;

в разных сеансах работы зажигают одинаковый набор событий;

в разных сеансах работы зажигают разные события.

Отметьте истинные высказывания:

класс, обрабатывающий событие, может отсоединить других обработчиков события и полностью определить реакцию на событие;

каждый объект определяет, какой обработчик присоединяется к событию;

метод GetInvocationList не применим к событиям;

все события имеют одну и ту же сигнатуру.

Класс EventHandler:

является классом, которому принадлежат все события;

является абстрактным классом и не может иметь экземпляров;

является родительским классом для событий, не имеющих собственных аргументов;

является потомком класса Delegate;

накладывает ограничения на сигнатуру события.

Вариант 3

Процедура, в которой зажигается событие:

передает обработчику событий входные аргументы и продолжает свою работу;

передает обработчику событий входные аргументы и ждет окончания работы первого обработчика, связанного с событием;

передает обработчику событий входные аргументы и ждет окончания работы всего списка обработчиков, связанного с событием;

может получить от обработчиков выходные аргументы и использовать их в своей работе.

Отметьте истинные высказывания:

события – это специализированный вариант делегатов;

к каждому событию должен быть присоединен хотя бы один обработчик события;

методы Combine и Remove, наследованные от класса Delegate не применимы к событиям;

допустимо динамическое связывание событий с обработчиками событий.

Все аргументы события принадлежат:

классу EventArgs;

классу EventArgs, за исключением аргумента, задающего объект, зажигающий событие;

потомку класса EventArgs;

потомку класса EventArgs за исключением аргумента, задающего объект, зажигающий событие;

возможно разным классам.


Вариант 1

Отметьте корректные объявления делегата – функционального класса:

public class D = delegate void(string s);

Delegate D1 = new Delegate( void(string s);

public delegate void D2 (string s);

delegate int T(int x1, ref int x2);

public delegate T1(int x);

Отметьте истинные высказывания:

каждый объявленный функциональный класс является наследником класса Delgate;

сигнатура метода, связываемого с экземпляром делегата, в точности совпадает с сигнатурой, определенной делегатом;

один из аргументов функции высшего порядка является экземпляром делегата;

для делегатов определена операция вычитания;

определение делегата эквивалентно определению указателя на функцию.

Функция обратного вызова – это:

функция, прямо или косвенно вызывающая саму себя;

функция f, вызывающая функцию g, переданную ей в качестве одного из аргументов, c сигнатурой, удовлетворяющей контракту, заданному функцией f;

пара функций, взаимно вызывающих друг друга;

функция высшего порядка.

Вариант 2

Дано объявление делегата:  public delegate double D (double x); Какие объявления его экземпляров будут корректны в определенном контексте:

D d1 = new D(Math.sin);

D d2 = new D(double f(double x){return x+1;};

D d3 = new D(x.f1);

D d4 = new D(Person.f2);

D d5 = new D(f3);

Отметьте истинные высказывания:

каждый экземпляр делегата обладает методом GetInvocationList;

над делегатами определена операция умножения *;

при вызове метода, связанного с экземпляром делегата, могут выполняться методы других экземпляров;

язык C# позволяет построить делегата непосредственным наследованием от абстрактного класса Delegate;

Класс Delegate не определен в библиотеке FCL.

Реализация экземпляра делегата в виде процедуры

позволяет скрыть его от клиента;

иметь один экземпляр вместо нескольких;

динамически связывать экземпляр с методом;

экономить память.

Вариант 3

Что мощнее наследование или функциональный тип?

наследование позволяет промоделировать механизм функций высших порядков;

функциональный тип позволяет моделировать наследование;

виртуальные методы и функции высших порядков основаны на контракте;

оба механизма дополняют друг друга;

эти механизмы не имеют ничего общего.

Отметьте истинные высказывания:

делегаты являются наследниками интерфейса ICloneable;

делегаты являются наследниками интерфейса ISerializable;

операции + и – изменяют приоритет делегата;

метод Combine возвращает в качестве результата объект того же типа, что и экземпляр делегата, вызвавшего метод.

Какие методы делегатов являются статическими:

Combine;

Clone;

CreateDelegate;

GetInvocationList;

GetHashCode.


Вариант 1

Ключевое слово interface в языке C# задает описание:

пользовательского интерфейса класса;

открытой части класса;

частного случая класса;

абстрактного класса.

Отметьте истинные высказывания:

слово «интерфейс» имеет разный смысл в зависимости от контекста;

множественное наследование интерфейсов дает те же возможности, что и множественное наследование классов;

при наследовании интерфейса ICloneable необходимо реализовать метод MemberwiseClone;

при наследовании двух интерфейсов имена их методов должны быть различными;

несколько интерфейсов могут быть наследниками одного и того же интерфейса.

Интерфейс ISerializable:

автоматически реализует глубокую сериализацию;

позволяет управлять процессом сериализации;

имеет два метода, которые должен реализовать класс, наследующий интерфейс;

конфликтует с атрибутом класса Serializable.

Вариант 2

Пусть задано описание интерфейсов: interface IN{string M(string s);} interface IP{string M(string s); string M1(int s);} interface IQ{int M(int s);}. Какие из объявлений классов содержат ошибки:

public class C1:IP{string IP.M(string s){return (s+s);}
string IP.M1(int x){return x.ToString();}public int M (int s) { return s++;}}

public class C1:IP,IN{string IP.M(string s){return (s+s);}
string IP.M1(int x){return x.ToString();}}

public class C1:IP,IN{public string M(string s){return (s+s);}
public string M1(int x){return x.ToString();}}

public class C1:IP,IN,IQ{public string M(string s){return (s+s);}
public string M1(int x){return x.ToString();}}

Отметьте истинные высказывания:

для того чтобы объекты собственного класса сравнивать на «больше» и «меньше», необходимо сделать класс наследником интерфейса IComparable;

для того чтобы объекты собственного класса можно было клонировать, необходимо сделать класс наследником интерфейса ICloneable;

для того чтобы объекты собственного класса можно было сериализовать, необходимо сделать класс наследником интерфейса ISerializable;

методы разных интерфейсов с одинаковой сигнатурой можно «склеивать» в классе наследнике, назначая им одну реализацию;

реализация метода Clone позволяет организовать глубокое клонирование.

Класс с атрибутом Serialize:

должен быть наследником интерфейса ISerializable;

при вызове форматером метода Serialize выполняет глубокую сериализацию, если класс не является наследником интерфейса ISerializable;

допускает два формата сериализации данных;

облегчает организацию обмена данными с удаленным приложением;

позволяет сохранять данные в текстовом формате.

Вариант 3

Пусть задано описание интерфейса и класса: interface IP{string M(string s); string M1(int s);} public class C1:IP{string IP.M(string s){return (s+s);}
string IP.M1(int x){return x.ToString();}public int M (int s) { return (s++);}}
Какие из объявлений в клиентском классе выполнимы:

C1 it1 = new C1(); it1.M(7777);

C1 it2 = new C1(); string s ="ss"; s =it2.IP.M(s);

C1 it3 = new C1(); string s ="ss"; s =((IP)it3).M(s);

IP it4 = new IP(); string s= "ss"; s = it4.M(s);

IP it5 = (IP) new C1(); string s= "ss"; s = it5.M(s);

Отметьте истинные высказывания:

один класс может наследовать несколько интерфейсов;

один интерфейс может наследоваться несколькими классами;

из-за коллизии имен дублируемое наследование интерфейсов запрещено;

интерфейс может быть наследником нескольких интерфейсов;

класс с атрибутом ISerializable должен реализовать специальный защищенный конструктор.

При наследовании интерфейсов:

класс наследник должен реализовать хотя бы один из его методов;

может выполнить переименование методов интерфейса;

может выполнить склейку методов с одинаковой сигнатурой;

может выполнить склейку методов с разной сигнатурой;

объекту интерфейсного типа доступны закрытые методы интерфейса, реализованные в классе;

объекты интерфейсного типа создаются стандартным путем с помощью контсруктора.


Вариант 1

Для классов клиентов и поставщиков справедливы утверждения:

у класса поставщика может быть много клиентов;

у класса клиента может быть много поставщиков;

поставщик может быть собственным поставщиком;

клиент может быть собственным клиентом;

отношение «клиент-поставщик» – задает отношение «имеет»;

отношение «клиент-поставщик» – задает отношение «является».

Отметьте истинные высказывания:

класс называется абстрактным, если он не вводит собственных полей данных;

если в методах класса А вызываются методы класса В, то это означает, что класс А является клиентом класса В;

у класса может быть несколько непосредственных родительских классов;

у класса может быть только один непосредственный потомок;

в проектах на C# контроль типов выполняется на этапе компиляции.

В родительском классе описан метод public virtual void M(int x) {}. Какие объявления в классе потомке вызовут ошибку на этапе компиляции?

override void M(int x){}

public override void M(int item){}

public new void M(int x){}

public virtual void M(int x){}

public virtual void M(int x, int y){}

Вариант 2

Для классов родителей и потомков справедливы следующие утверждения:

у родительского класса может несколько непосредственных потомков;

у класса потомка может быть несколько непосредственных родительских классов;

класс родитель может быть сам себе родитель;

класс потомок может быть собственным потомком;

потомок наследует все поля и методы родителя, за исключением закрытых (private);

Отметьте истинные высказывания:

класс с модификатором sealed не может иметь потомков;

класс с модификатором abstract не может иметь потомков с таким же модификатором;

если не задан специальный модификатор, то по умолчанию применяется динамическое связывание;

класс потомок не наследует конструкторы своего родителя.

В родительском классе описан метод public virtual void M(int x) {}. Какие объявления в классе потомке вызовут предупреждения на этапе компиляции?

override void M(int x){}

public override void M(int item){}

public new void M(int x){}

public virtual void M(int x){}

public virtual void M(int x, int y){} 2

Вариант 3

Для понятия «полиморфизм» справедливы следующие утверждения:

полиморфизм определяется для семейства классов, связанных отношением наследования;

полиморфизм определяется для семейства классов, связанных отношением вложенности;

полиморфизм означает, что в классе заданы перегруженные методы;

реализация полиморфизма построена на динамическом связывании;

реализация полиморфизма предполагает статический контроль типов.

Отметьте истинные высказывания:

вызов конструктора приводит к вызову конструкторов всех предков класса;

клиенту доступны все методы поставщика;

наследнику доступны все методы предков;

абстрактный класс может иметь полностью реализованный метод;

объект наследника «является» объектом родителя.

В родительском классе описан метод public void M(int x) {}. Какие объявления в классе потомке вызовут ошибки или предупреждения на этапе компиляции?

public override void M(int x) {}

public new void M(int x) {}

public new void M(int x, int y){}

public void M(int x){}

private new void M(int x){}


 

А также другие работы, которые могут Вас заинтересовать

7086. Процеси теплообміну при нагріванні рідини 176.31 KB
  Мета роботи: дослідити процеси теплообміну при нагріванні рідини та виявити величину і причини розбіжності результатів експериментального і аналітичного дослідження. Обладнання: експериментальна установка для нагрівання рідини ТА...
7087. Электростатическое поле в вакууме 168.5 KB
  Тема: Электростатическое поле в вакууме. Основу электростатики составляют инвариантность электрического заряда к выбору системы отсчета, закон сохранения заряда, закон Кулона, принцип суперпозицииполейи теорема Остроградского...
7089. Биомедицинская этика. Учебное пособие 333 KB
  Теоретические основания биомедицинской этики Глава 1.Биомедицинская этика: научный статус и круг проблем 1.1. Биомедицинская этика: возникновение и место в системе естественнонаучного, этического и социального знания...
7090. Мировая экономика. Ответы на экзаменационные вопросы 255.04 KB
  Мировая экономика. Ответы на экзаменационные вопросы Сущность мировой экономики и мирового (всемирного) хозяйства Понятие мировая экономика в современной экономической литературе употребляется для обозначения как системы государств, так и эконо...
7091. Религии мира. Учебное пособие 188.67 KB
  Введение Исследователь, прилетевший на нашу планету из космоса, мог бы сделать вывод, что мы страдаем от непристойной и очень загадочной болезни с удивительно большим спектром симптомов. Одних она заставляет безжалостно жечь, резать или бомбить свои...
7092. Средневековая схоластика Ф. Аквинского 43.53 KB
  Средневековая схоластика Ф. Аквинского Характеристика Средних веков Эпоха средневековья длилась более тысячи лет. Ученые считают началом средних веков - падение Римской империи (V век н.э.), когда христианская религия окончательно утверди...
7093. Маркетинговое обслуживание потребителей 49.99 KB
  Введение В условиях рыночной экономики многие проблемы товаропроизводителей не могут быть в полной мере решены с помощью традиционных методов управления. Требуется создавать систему менеджмента, обеспечивающую эффективность хозяйственной единицы в н...
7094. Магнитометры на СКВИДах 108.5 KB
  Магнитометры на СКВИДах. Сверхпроводимость. Основные параметры сверхпроводников. Явление сверхпроводимости состоит в том, что при некоторой температуре, близкой к абсолютному нулю, электро сопротивление в некоторых материалах исчезает. Эта темпера...