51471
Отношения между классами. Интерфейсы, делегаты и события
Лекция
Информатика, кибернетика и программирование
Отношения между классами. Понятие отношения между классами. Классы с событиями. Обработчик события: всегда принадлежит классу зажигающему событие; никогда не принадлежит классу зажигающему событие; может принадлежать классу зажигающему событие; принадлежит только одному классу слушающему событие; может принадлежать многим классам слушающим события. Отметьте истинные высказывания: все события имеют одинаковую сигнатуру из двух аргументов с одними и теми же типами; все события имеют сигнатуру из двух аргументов но с...
Русский
2014-02-11
40.52 KB
9 чел.
Вариант 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){}
А также другие работы, которые могут Вас заинтересовать | |||
5943. | Архитектура Киевской Руси | 59.5 KB | |
I. Архитектура Киевской Руси Н. М. Карамзин в Истории государства Российского, описывая истоки возникновения искусства Древней Руси, рассказывает, как Владимир, увидев, подобно бабке своей, заблуждение язычества, стал искать истины в разных верах... | |||
5944. | Рапсовое масло как альтернативное топливо для дизеля | 39.56 KB | |
Двигатели внутреннего сгорания (ДВС), на сегодняшний день, являются основными потребителями топлив нефтяного происхождения. По причине постоянного увеличения численности ДВС и снижения количества вновь открываемых месторождений нефти обостр... | |||
5945. | Изучение реэтимологизированных образований, функционирующих в языке сатирических и юмористических произведений | 117.23 KB | |
Великие мастера мировой культуры высоко ценили роль сатиры и юмора в культуре. Для выявления возможностей сатиры и юмора, их роли в развитии человека и социальной значимости необходимо изучение не только художественно - эстетических ка... | |||
5947. | Учет и анализ оборотного капитала организации на примере ОАО МАГЭ | 440.5 KB | |
Актуальность данного исследования заключается в том, что в условиях рыночной экономики особенно тщательного анализа требуют изменения состава и динамики оборотных активов как наиболее мобильной части капитала, от состояния которых в значите... | |||
5948. | Методы оценки физического развития и состояния здоровья человека | 58.5 KB | |
Методы оценки физического развития и состояния здоровья человека. Физическое развитие совокупность морфологических и функциональных признаков, которые определяют физическую работоспособность человека. На физическое развитие существенное влиян... | |||
5949. | Понятие и основные признаки судебной власти | 31.93 KB | |
Сегодня в правовой науке остро стоит вопрос о будущем системы органов прокуратуры в целом и ее взаимодействии и соотношении с судебной властью в Российской Федерации в частности. В отличие от других органов власти в отношении прокуратуры за... | |||
5950. | Бизнес план автосервиса | 34.78 KB | |
Введение Рынок иномарок в нашей стране по-прежнему растет за счет пересаживания автомобилистов с отечественных автомобилей или иностранного second-hand на новые машины. Пока эта тенденция сохраняется, в бизнесе будет выигрывать тот, кто сможет сос... | |||
5951. | Особенности бухгалтерского учета и налогообложения внешнеэкономической деятельности | 77.5 KB | |
Особенности бухгалтерского учета и налогообложения внешнеэкономической деятельности Бухгалтерский учет внешнеэкономической деятельности имеет свои специфические особенности, без знания которых невозможно получить достоверную информацию о предпринима... | |||