игра брюс 2048
Главная / Программирование / Объектное программирование в классах на C# 3.0 / Тест 8

Объектное программирование в классах на C# 3.0 - тест 8

Упражнение 1:
Номер 1
 Универсальный класс - это класс:

Ответ:

 (1) методы которого позволяют решать любые задачи, необходимые клиентам класса 

 (2) между объектом которого x и объектом y любого другого класса существует взаимное преобразования типа, так что допустимо двустороннее присваивание x = y и y = x  

 (3) с параметрами, задающими типы полей, методов и других сущностей, определяемых в классе 


Номер 2
 Параметры, задающие тип, может иметь: 

Ответ:

 (1) класс 

 (2) метод класса 

 (3) поле класса 


Номер 3
 Универсальным может быть класс, заданный с ключевым словом:

Ответ:

 (1) class 

 (2) struct 

 (3) interface 

 (4) delegate 

 (5) enum 


Упражнение 2:
Номер 1
 Наследование и универсальность являются двумя основными механизмами, обеспечивающими мощность объектной технологии разработки. Возможно ли объединение этих механизмов? Отметьте истинные высказывания:

Ответ:

 (1) класс может быть объявлен как абстрактный класс, но тогда он не может быть универсальным классом 

 (2) класс может быть объявлен как универсальный класс, но тогда он не может быть абстрактным классом 

 (3) класс может быть объявлен как абстрактный класс, и одновременно он может быть универсальным классом 


Номер 2
 Укажите высказывания истинные для параметров универсального класса:

Ответ:

 (1) когда формальный параметр T заменяется фактическим типом TFact , то там, где разрешено появляться объектам типа TFact , разрешены и объекты, принадлежащие классам-потомкам TFact  

 (2) когда формальный параметр T заменяется фактическим типом TFact , то там, где разрешено появляться объектам типа TFact , не разрешены объекты, принадлежащие классам-потомкам TFact  

 (3) на тип, задаваемый параметром T , можно наложить ограничение наследования, требующее чтобы тип (класс) T был наследником некоторого класса и/или ряда интерфейсов 


Номер 3
 Укажите объявление класса, которое может быть  синтаксически корректным  в некотором контексте 

Ответ:

 (1) public class Univers1 : P1, P2 { }  

 (2) public class Univers2 < P1, P2> { }  

 (3) public class Univers3 ( P1, P2) { }  


Упражнение 3:
Номер 1
 Класс, являющийся наследником универсального класса с параметрами:

Ответ:

 (1) должен быть универсальным классом и включать в число параметров все параметры родительского класса 

 (2) может не иметь параметров 

 (3) может быть универсальным классом, но включать только часть параметров родителя 


Номер 2
 Какие объявления классов являются синтаксически корректными:

Ответ:

 (1) public class T {public void M<P> (P field) { } }  

 (2) public delegate P F<P>( P s)  

 (3) public interface Inter<P> { P Method(P x);}  

 (4) public enum C<P> : P{ item1, item2, item3}  


Номер 3
 Класс, являющийся наследником универсального интерфейса с параметрами:

Ответ:

 (1) должен быть универсальным классом и включать в число параметров все параметры родительского интерфейса 

 (2) может не быть универсальным классом 

 (3) может быть универсальным классом, но включать только часть параметров родительского интерфейса 


Упражнение 4:
Номер 1
 Какие высказывания являются истинными по отношению к неограниченной универсальности, когда на параметры универсального класса не накладываются никакие ограничения:

Ответ:

 (1) в качестве фактического параметра можно использовать любой тип, разрешенный в C#  

 (2) над объектами, тип которых задан параметром типа, допустимы любые операции, разрешенные в языке C#  

 (3) над объектами, тип которых задан параметром типа, допустимы только операции, разрешенные для объектов типа object языка C# - присваивание и сравнение на равенство и неравенство; 


Номер 2
 Какие высказывания являются истинными по отношению к ограничению универсальности:

Ответ:

 (1) на параметры универсального класса нельзя накладывать ограничения 

 (2) если на параметры универсального класса накладываются ограничения, то они накладываются на все параметры одновременно 

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

 (4) в версии языка C# 3.0 существуют три вида ограничений, которые можно накладывать на параметры универсального класса 


Номер 3
 Укажите, какие ограничения допустимы для параметров универсального класса:

Ответ:

 (1) ограничение наследования, когда для типа T указывается его родитель class S<T> where T : Parent { }  

 (2) ограничение операций, когда у типа T должны быть определены операции, перечисленные в списке операций class S<T> where T : Operations( +, -, *, /) { }  

 (3) ограничение конструктора, когда у типа T должен быть задан конструктор без аргументов class S<T> where T : new() { }  

 (4) ограничение ссылочный/развернутый, когда тип T должен относиться либо к ссылочным либо к развернутым типам class S<T> where T : struct { }  


Упражнение 5:
Номер 1
 При задании ограничений на параметры универсального класса:

Ответ:

 (1) для каждого параметра, на который накладывается ограничение, строится свое предложение where 

 (2) в одном предложении where можно наложить ограничения на все параметры универсального класса 

 (3) в одном предложении where на один параметр универсального класса можно наложить разные виды ограничений 


Номер 2
 При задании ограничений на параметры универсального класса:

Ответ:

 (1) ограничение на каждый параметр задается предложением where  

 (2) для одного параметра можно задать несколько предложений where  

 (3) предложения where отделяются пробелами 

 (4) разные виды ограничений в одном предложении where отделяются запятыми 


Номер 3
 Отметьте истинные высказывания:

Ответ:

 (1) компилятор C# строит код для каждого класса, получаемого заменой формальных параметров универсального класса на фактические, что приводит к дублированию программного кода; 

 (2) компилятор C# строит параметризованный код универсального класса. При конструировании объектов конкретного типа происходит подстановка соответствующих параметров типа, так что дублирования кода не происходит 

 (3) универсальность и наследование позволяют существенно сократить объем кода программной системы 

 (4) предложение using позволяет задать имя для класса, представляющего родовое порождение, и это имя многократно использовать при объявлении объектов этого класса 


Упражнение 6:
Номер 1
 

Программист написал фрагмент кода, при компиляции которого возникла ошибка

class A1<A1, B> { A1 a1; B b;}

У программиста есть несколько версий причины возникновения ошибки. Укажите, какая из них верна:


Ответ:

 (1) я написал правильный код, это ошибка в работе компилятора 

 (2) ошибка состоит в том, что для класса А1 заданы два родовых параметра, а разрешается только один 

 (3) ошибка состоит в том, что в классе А1 заданы поля, тип которых определяется параметрами класса, что недопустимо 

 (4) ошибка состоит в том, что для класса А1 указан параметр, имя которого совпадает с именем класса, что недопустимо 


Номер 2
 

Программист написал фрагмент кода, при компиляции которого возникла ошибка

interface IC<C> { C Method(C arg); } class A2<B> : IC<C> { public C Method(C arg) { return arg; } }

У программиста есть несколько версий причины возникновения ошибки. Укажите, какая из них верна:


Ответ:

 (1) я написал правильный код, это ошибка в работе компилятора 

 (2) ошибка состоит в том, что класс А2 , являющийся наследником интерфейса, обязан включить в состав своих параметров все параметры интерфейса 

 (3) ошибка состоит в том, что класс А2 , являющийся наследником интерфейса, может иметь в качестве родовых параметров только параметры интерфейса 


Номер 3
 Укажите, в каких фрагментах кода возникнут ошибки:

Ответ:

 (1) class A<B, C> { B b; C c;}  

 (2) interface ID<D> { D Method(D arg); } class A2<B> : ID<D> { public D Method(D arg) { return arg; } }  

 (3) class A<A, B> { A a1; B b;}  

 (4) class A<B, C> { B b; C c;} class A3<B> where B : A<int, int> { }  




Главная / Программирование / Объектное программирование в классах на C# 3.0 / Тест 8