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){}


 

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

34043. Правовой режим земель лесного фонда 56.5 KB
  Правовой режим земель лесного фонда. ЗЕМЛИ ЛЕСНОГО ФОНДА К землям лесного фонда согласно ст. 101 Земельного кодекса РФ относятся: 1 лесные земли а земли покрытые лесной растительностью; б не покрытые ею но предназначенные для ее восстановления вырубки гари редины прогалины; 2 предназначенные для ведения лесного хозяйства нелесные земли просеки дороги болота. Земли лесного фонда занимают больше половины территории России 59.
34044. Правовой режим особо охраняемых территорий (общие положения) 25.5 KB
  Правовой режим особо охраняемых территорий общие положения. Особо охраняемые природные территории определены законодательством РФ как участки земли водной поверхности и воздушного пространства над ними где располагаются природные комплексы и объекты имеющие особое природоохранное научное культурное эстетическое рекреационное и оздоровительное значение. Общественные отношения в сфере организации охраны и использования особо охраняемых природных территорий с целью сохранения уникальных и типичных природных комплексов и объектов...
34045. Правовой режим земель сельскохозяйственного назначения (общие положения) 79.5 KB
  Правовой режим земель сельскохозяйственного назначения общие положения. Правовой режим земель сельскохозяйственного назначения. В действующем Земельном Кодексе РФ целая глава посвящена закреплению правового режима земель сельскохозяйственного назначения. Правовой режим использования данных земель кроме ЗК РФ регулируется также специальным Федеральным законом от 24 июля 2002г.
34046. Правовой режим земель специального назначения 84 KB
  Землями специального назначения признаются земли отведенные в установленном порядке предприятиям учреждениям и организациям для выполнения соответствующих задач. Общим признаком всех видов земель данной категории является то обстоятельство что данные земли выступают в качестве территориального базиса и не являются сельскохозяйственными т. Правовой режим земель специального назначения распространяется и на земли других категорий. В зависимости от нахождения в той или иной категории земли специального назначения имеют определенный...
34047. Правовой режим земель поселений 48 KB
  Правовой режим земель поселений. Одной из них являются земли поселений. Данные земли представляют собой пространственнооперационный базис располагающихся на них городов и других поселений. Землями поселений признаются земли предоставленные для размещения и развития городов поселков и сельских поселений.
34048. Правовой режим земель природоохранного, рекреационного, историко-культурного назначения. Особо ценные земли 77.5 KB
  Они имеют целью сохранение и изучение естественного хода природных процессов и явлений генетического фонда растительного и животного мира отдельных видов и сообществ растений и животных типичных и уникальных экологических систем. Земля воды недра государственных природных заповедников со всеми находящимися в их пределах объектами растительного и животного мира историкокультурными и другими объектами недвижимости полностью и безвозмездно предоставляются заповедникам в бессрочное постоянное пользование. Имущество государственных...
34049. Правовой режим особо охраняемых территорий, в т.ч. земель лечебно-оздоровительных местностей и курортов 27 KB
  К землям особо охраняемых природных территорий относятся земли государственных природных заповедников в т. биосферных государственных природных заказников памятников природы национальных парков природных парков дендрологических парков ботанических садов территорий традиционного природопользования коренных малочисленных народов Севера Сибири и Дальнего Востока Российской Федерации а также земли лечебнооздоровительных местностей и курортов.Земли особо охраняемых природных территорий относятся к объектам общенационального достояния и...
34050. Охрана земель в Российской Федерации: понятие, цели, содержание 34.5 KB
  Охрана земель в Российской Федерации: понятие цели содержание. Охрана земель. Охрана и защита земель – разные понятия. Законодатель отказался от легального определения охраны земель.
34051. Возмещение потерь сельскохозяйственного производства и потерь лесного хозяйства 54 KB
  57 ЗК РФ убытки в полном объеме в том числе упущенная выгода возмещаются землепользователям землевладельцам и арендаторам земельных участков:1 при изъятии земельных участков для государственных или муниципальных нужд;2 в связи с ухудшением качества земель в результате деятельности других лиц;3 при временном занятии земельных участков;4 при ограничении прав собственников земельных участков землепользователей землевладельцев арендаторов.Собственникам земельных участков убытки возмещаются во всех названных случаях кроме случаев изъятия...