Внимание ! Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier! Спецификации CLS задают:
спецификации, предназначенные для разработчиков трансляторов спецификации модуля, предназначенного для использования в проектах на разных языках программирования спецификации, которые безусловно должны выполняться программистами, работающими в среде Visual Studio .Net спецификации для программистов, работающих на языке C#
Библиотека FCL - это:
набор классов, представляющих типы данных, общие для всех языков программирования в независимости от платформы набор классов, используемых компиляторами среды и не разрешенных для непосредственного использования в программах на C# набор классов, используемых как компиляторами, так и в программах на C#
Отметьте верные высказывания:
типы данных языка C# при компиляции отображаются в типы данных каркаса Framework .Net проект может содержать несколько пространств имен каждому типу проекта, который можно построить в Visual Studio, соответствует свой набор классов библиотеки FCL
На каких языках программирования можно работать в Visual Studio .Net?
только на языке C# на четырех языках - Visual C++, C#, Visual Basic, J# число языков не ограничено
Отметьте истинные высказывания:
Для Visual Studio .Net разработано много компиляторов для разных языков программирования и каждый программист может добавить новый компилятор в состав используемой им студии компилятор C# транслирует исходный текст в код на языке IL CLS-совместимый модуль может использоваться на любом языке программирования на платформе .NET
Сборщик мусора Garbage Collector это:
компонент компилятора компонент Visual Studio компонент Framework .Net
Исполнительная среда CLR:
содержит JIT-компилятор с промежуточного языка IL в код платформы, на которой установлена среда CLR содержит сборщик мусора содержит набор компиляторов с языков, входящих в состав Visual Studio
Отметьте верное утверждение:
манифест PE-файла включает в себя описание всех хранимых в нем классов программисту на C# всегда приходится самостоятельно заниматься освобождением памяти, не доверяя эту работу сборщику мусора всякая ошибка в ходе выполнения программы приводит к прерыванию ее работы
Каркас Framework .Net это:
надстройка над операционной системой, предназначенная для выполнения управляемого кода, например сборок, построенных компиляторами Visual Studio .Net транслятор JIT, выполняющий трансляцию модулей, написанных на языке MSIL библиотека классов, используемая компилятором набор классов, используемых при построении самой Visual Studio .Net
Пространство имен – это:
множество имен, включающих имена переменных проекта множество имен, включающих имена переменных класса модуль, содержащий встроенные пространства имен и классы, имена которых уникальны в пространстве имен
Проект – это:
модуль, содержащий классы и являющийся частью решения спецификация, отвечающая требованиям CLS компонент пространства имен набор классов, используемых при построении самой Visual Studio .Net
Отметьте истинные высказывания:
метод Run – это обычно один из первых выполняемых методов Windows-проекта, включаемый в процедуру Main процедура Main консольного проекта содержит вызов метода Run класс может выступать в роли цели вызова в каждый момент выполнения проекта существует текущий объект
Для создания XML-отчета для проекта необходимо:
задать хотя бы один тег <summary> отчет всегда строится вместе с проектом включить соответствующее свойство проекта
XML-отчет:
создается самим программистом создается по требованию программиста хранится в отдельном файле создается автоматически и является частью любого проекта
Отметьте верные высказывания:
свойства проекта можно установить на странице свойств Property Pages в Windows-проекте разрешен вывод методами класса Console класс Form задает общие свойства форм, появляющихся в Windows-проекте
К типам, определяемым пользователем языка C#, относятся:
структуры перечисления классы строки
Отметьте истинные высказывания:
тип double является классом, родителем которого является класс object все типы являются наследниками класса object значимые типы не входят в иерархию классов языка C# тип string наследует методы родительского класса object и определяет собственные методы тип int наследует методы родительского класса object и определяет собственные методы
Если присваивание x= y; допустимо, то обратное присваивание y=x;
всегда допустимо всегда допустимо для переменных ссылочных типов всегда допустимо для переменных значимых типов может требовать явного преобразования типов всегда требует явного преобразования типов
Преобразование к типу object
всегда возможно и выполняется автоматически возможно, но требует явного задания преобразования возможно только для объектов ссылочного типа
Укажите истинные высказывания:
целью называется левая часть оператора присваивания, а также формальный аргумент при передаче фактического аргумента в процедуру или функцию в момент вызова операции упаковки и распаковки могут выполняться при замене формальных аргументов метода на фактические аргументы присваивание может быть ссылочным или значимым в зависимости от типа цели
К значимым типам языка C# относятся:
все арифметические типы массивы строки все арифметические типы, кроме типа double
Отметьте истинные высказывания:
метод ToString() может быть вызван переменной X арифметического типа – X.ToString() метод ToString() может быть вызван объектом X класса Т, созданного пользователем – X.ToString() объекту класса Т, созданного пользователем, всегда можно присвоить объект базового класса Object
Если формальный аргумент метода объявлен как объект класса T, то фактический аргумент может быть:
класса T или класса, являющегося потомком класса T класса, являющегося родителем класса T только класса object любого класса только класса T
Операции упаковки и распаковки (boxing, unboxing)
преобразуют объекты значимого типа в ссылочный и обратно обе операции выполняются автоматически, не требуя явного задания преобразования типов задают преобразование строк из кодировки Unicode в кодировку ASCII и обратно
Правда ли, что:
данные ссылочного типа хранятся в куче если при присваивании источник имеет значимый тип, то и цель преобразуется к значимому типу базовый тип сущности определяется классом, заданным при объявлении
Цель и источник согласованы по присваиванию, если
базовый тип цели является потомком типа источника тип источника является потомком базового типа цели базовый тип цели и тип источника совпадают базовый тип цели – object
Правда ли, что:
в программе на C# вместо типа int можно использовать системный тип Int32 динамический тип сущности определяется типом объекта, с которым в данный момент связана сущность данные значимого типа хранятся в куче
Отметьте истинные высказывания:
переменная арифметического типа в определенном контексте воспринимается как объект существует неявное преобразование переменных арифметического типа в объекты возможно явное преобразование объектов в переменные арифметического типа существует неявное преобразование объектов в переменные арифметического типа
Класс object - это
родительский класс для объектов ссылочного типа родительский класс для объектов значимого типа родительский класс для объектов классов, создаваемых программистом
Преобразования между значимыми и ссылочными типами
используют операции boxing и unboxing всегда допустимы могут быть неявными должны быть явными никогда не допустимы
Отметьте истинные высказывания:
существует явное преобразование объектов в переменные арифметического типа существует неявное преобразование переменных арифметического типа в объекты в зависимости от контекста переменная арифметического типа представляет собой объект существует неявное преобразование объектов в переменные арифметического типа
При включенной опции компилятора /checked проверка корректности преобразований типов выполняется:
только для преобразований арифметического типа во всем проекте, исключая непроверяемые блоки и непроверяемые выражения для всех преобразований во всем проекте для всех преобразований во всем проекте, исключая непроверяемые блоки и непроверяемые выражения для всех преобразований во всем проекте, исключая непроверяемые блоки
Необходимость в преобразованиях может возникать:
в выражениях при присваивании при замене формальных аргументов фактическими
Выберите верные высказывания:
семантика присваивания для ссылочных и значимых типов различна преобразование из типа byte в тип int относится к явным преобразованиям исключения являются нормальным способом уведомления об ошибках, возникающих в процессе выполнения программы
В проверяемом (checked) блоке проверяется корректность
всех преобразований типов преобразований внутри арифметического типа только преобразований, выполняемых методом Parse только преобразований, выполняемых методами класса Convert
Явное преобразование типа может быть выполнено:
статическим методом Convert статическими методами класса Convert приведением типа разрешено только для значимых типов
Отметьте истинные высказывания:
метод ToString, задающий преобразование в строку, определен для любого объекта X класса Т, созданного пользователем объекту базового класса Object можно присвоить объект класса Т, созданного пользователем исключения, возникающие в охраняемом try-блоке, всегда перехватываются catch-блоком, сопровождающим охраняемый блок
Правда ли, что:
неявные преобразования выполняются автоматически от типов фактических аргументов зависит, какой из перегруженных методов будет вызван явные преобразования всегда безопасны
Отметьте истинные высказывания:
объявление переменных допускает отложенную инициализацию при объявлении арифметических переменных в объектном стиле не допускается задавать в конструкторе инициализирующее выражение в момент объявления все переменные должны быть инициализированы инициализирующее выражение должно быть константным выражением при объявлении переменных их не следует инициализировать, поскольку используется инициализация по умолчанию
Отметьте истинные высказывания:
поля класса играют роль глобальных переменных для методов класса в непересекающихся блоках процедуры допускаются одинаковые имена переменных глобальные переменные в C# могут быть объявлены только в пространстве имен имя локальной переменной не должно совпадать ни с именем аргумента метода, ни с именем поля класса
обязательно указание модификатора доступа обязательно указание атрибутов обязательно указание типа обязательна ее инициализация
Отметьте верные утверждения:
значения статических полей не изменяются в ходе вычислений локальными называются переменные, объявленные внутри метода время жизни переменных зависит от контекста объявления
Отметьте истинные высказывания:
поля класса могут быть объявлены как static область существования переменной, объявленной в процедуре, распространяется на весь процедурный блок если поле класса объявлено как static, то все экземпляры класса разделяют значение (область памяти) этого поля
Какие из выражений являются правильно построенными константами
0.5e-7 5.5f 0,5
Отметьте верное:
сборщик мусора не занимается освобождением памяти для переменных значимого типа память локальным переменным отводится в прологе блока до начала его выполнения для литералов значение константы является ее именем
Отметьте правильные объявления внутри метода:
int x, double y; int x, y, z = 77; int x =77, y = new int();
с именем поля класса с именем формального аргумента с именем локальной переменной, объявленной в том же блоке метода
Передавать и получать информацию методу можно
через поля класса через аргументы метода через глобальные переменные, объявленные в пространстве имен
Отметьте правильные объявления переменной:
int x = new int(); int x =77; int x = new int(77); int x; int x(77);
Верно, что приоритет операций выше:
вычитания чем сложения исключающего ИЛИ чем ИЛИ логических чем арифметических эквивалентности чем присваивания
Верно, что приоритет операций выше:
условных И, ИЛИ чем логических И, ИЛИ арифметических чем отношения отношения чем логических И чем ИЛИ
В результате объявления: int x=1,y=2,z=((x|y + ++x)>5)? x|y : ++x +2 ; переменные x,y,z получат значения
x=1; y=2; z=4 x=2; y=2; z=4 x=3; y=2; z=5 возникнет ошибка на этапе трансляции возникнет ошибка на этапе выполнения x=1; y=2; z=3
Отметьте истинное высказывание:
вызов MaxValue возвращает размер памяти, отводимой значениям типа условие в операторе if записано c ошибкой: if(2*2 = 4) операция new может выполняться только при объявлении переменной метод Parse определен для всех типов
Ключевое слово new в зависимости от контекста играет роль:
модификатора метода модификатора переменной операции
Правда ли, что:
пространство имен Reflection позволяет определить, какими методами обладает тот или иной класс аргументом операции typeof является имя типа (класса) все арифметические операции являются перегруженными
Верно, что приоритет операций выше:
унарных чем бинарных отношения чем умножения эквивалентности чем конъюнкции умножения чем сложения
В результате объявления: int x=2,y=5,z=((x|y +x++)>=9) ? x|y : ++x +2 ; переменные x, y, z получат значения
x=3; y=5; z=7 x=4; y=5; z=6 x=2; y=5; z=7 возникнет ошибка на этапе трансляции возникнет ошибка на этапе выполнения x=3; y=5; z=8
Под перегруженной операцией понимается операция:
сложность которой превышает сложность операции сложения для которой существует несколько реализаций применимая к операндам разного типа
Отметьте истинное высказывание:
операции логического и побитового отрицания определены над данными типа bool и арифметического типа соответственно метод Parse позволяет проводить преобразования арифметического типа в строковый порядок выполнения всех операций в C# левосторонний
Операциями присваивания языка C# являются:
&= ++ &&= >>=/ +=
Отметьте истинные высказывания:
метод NextDouble позволяет получать числа типа Double в диапазоне при вызове одного из методов класса Random можно получить целый массив случайных чисел методы класса Random позволяют получать только положительные случайные числа возможность получения повторяющихся серий случайных чисел определяется при вызове методов класса Random
В каких фрагментах возникнет ошибка:
int x=5, y, z; if(x>4) y=x; else y=4; z=y;/2 int u =5, v, w; if (u >0) v= 4; w=v;/1 float f1=1.0, f2= 2.0, f3 = f1+ f2;/2/3 double d1 =1.0, d2= 2.0, d3 = d1 + d2;/1/3
При ссылочном присваивании:
создается дополнительная ссылка на существующий объект/1 иногда остается «висячий» объект в куче (объект, на который не указывает ни одна ссылка) происходит копирование объекта, связанного с источником/1 всегда остается «висячий» объект в куче (объект, на который не указывает ни одна ссылка)
Верно ли, что:
код на C# <byte b = 1; b+=1;> эквивалентен коду <byte b = 1; b = b+1;> класс Random имеет несколько конструкторов операция присваивания выполняется справа налево
Отметьте истинные высказывания:
все методы класса Math являются статическими для вызова методов класса Random нужно предварительно создать экземпляр этого класса класс Random позволяет получить только повторяющиеся серии случайных чисел все переменные, входящие в выражение присваивания, должны быть явно инициализированы
В языке C# присваивание:
это операция, применимая в выражениях синтаксически является операцией, чаще всего используемой в роли оператора это оператор языка, не применимый в выражениях
Отметьте верные утверждения:
еще на этапе компиляции возникнет ошибка в следующем фрагменте <byte x; x+=100;> еще на этапе компиляции возникнет ошибка в следующем фрагменте <byte[] x = new byte[5]; x[0]+=100;> еще на этапе компиляции возникнет ошибка в следующем фрагменте <byte x = 200; x+=100;>
В классе Random определен:
метод NextInt перегруженный метод Rnd перегруженный конструктор Random метод Bytes перегруженный метод Next
В каком фрагменте возникнет ошибка:
sbyte sb1=1, sb2= 2, sb3 = sb1+ sb2 ulong ul1 =1, ul2= 2, ul3 = ul1 + ul2 int x; if (5 >4) x= 4 int x=5, y; if(x>4) y=x
В каких фрагментах возникнет ошибка:
double x; x=Math.Sin(1); int x; x=Random.Next(); Math M1 = new Math(); int x; x= M1.Sin(1); int x; Random R1 = new Random(); x=R1.Next();
Отметьте истинное высказывание:
для вызова методов класса Math нужно предварительно создать экземпляр этого класса при вызове любого из методов класса Random можно получить только одно случайное число возможность получения повторяющихся серий случайных чисел определяется при вызове конструктора класса Random все методы класса Random являются статическими
К специальным случаям присваивания относится:
выражение X=1 выражение X+=1 выражение X==1
Чему будет равно x в результате выполнения следующего фрагмента int a=2, b=3,c=5, x=0; if(a>b)if(c>a)if(c>a+b) x=a+b+c; else x=7;else x=12;
7 10 12 0
Отметьте истинные высказывания:
в заголовке операторе цикла for всегда требуется объявлять переменную, задающую счетчик цикла некоторые выражения могут использоваться в качестве оператора в теле оператора foreach не допускается присваивание значения текущему элементу оператор switch по своему действию может быть эквивалентен пустому оператору
В каких фрагментах возникнет ошибка компиляции:
int x=5, y =2*2+1, z; if (y=x) z=2*x; else z=x+y; int a=2, b=3,c=5, x;if(a<b)if(c>a)if(c>a+b) x=a+b+c; int x, y, z; if (5 >4) x=5; y=x; z=y;
Операторами цикла в C# являются:
оператор foreach оператор do – while с проверкой условия в конце цикла оператор while с проверкой условия в начале цикла оператор loop с проверкой условия в середине цикла оператор for
Правда ли, что:
цикл foreach применим к массивам допустима такая конструкция <if (a>0) if (b>0) if(c>0) …> каждый блок должен завершаться символом точка с запятой
Отметьте истинное высказывание:
любое выражение может использоваться в качестве оператора оператор if может быть эквивалентен по своему действию пустому оператору оператор foreach не применим при работе с массивами каждая case-ветвь оператора switch должна заканчиваться оператором break
В каких фрагментах возникнет ошибка:
int x=5; {int y = 7;} int z = x+y; int x=5, y = 2*2+1, z; if(y >=x) z=2*x; else z=x+y; for (int Sum=0, i=0; i<N; i++) Sum += Arr[i]; ( N и Arr определены должным образом) string s, s1, s2, s3; s=s1=s2=s3="око"; switch(s) { case s1: x=3; break; case s2: case s3: x=5; break; }
Отметьте верное утверждение:
фрагмент кода if (x = y) всегда приводит к появлению ошибки еще на этапе трансляции удаление пустого оператора никогда не меняет семантику программы доказано, что без оператора перехода goto можно обойтись
Отметьте истинное высказывание:
присваивание является операцией языка C# в теле оператора foreach текущий элемент позволяет получать и изменять значения элементов, хранящихся в контейнере в операторе if число ключевых слов if должно совпадать с числом слов else case-выражение в операторе switch может задавать диапазон значений
В каких фрагментах возникнет ошибка:
int x=5, y, z; if(x>4) y=x; else y=4; z=y; int x=5, z; {int y=7; z=y+1;} int w = x+z; x=;; y=7/2 string s="кок"; switch(s) { case "око": break; case "кок": case "рок": s="тук"; s=s+s; break; }
Оператор return
обязателен в функциях возможен в процедурах завершает выполнение функции или процедуры
Чему будет равно x в результате выполнения следующего фрагмента:
int x=5; for(int i =1; i<5; i++); x+=5;
5 10 25 30 20
Правда ли, что:
оператор break должен присутствовать в каждой ветви оператора разбора случаев switch можно написать программу с бесконечным циклом еще на этапе компиляции возникнет ошибка в следующем фрагменте кода <int x=1, y =1; if (x=y) {…};>
Тело цикла for (int i = 1, j=-10; j<10; i--) j++;
ни разу не выполнится выполнится 3 раза произойдет зацикливание выполнится конечное число раз, большее 3-х
При вызове аргумента "по значению":
значение фактического аргумента не меняется в результате вызова фактический аргумент не может быть именем формальный аргумент должен снабжаться ключевым словом ref создается копия фактического аргумента
Отметьте истинные высказывания:
только процедуры являются методами класса формальный аргумент метода может быть выражением ключевые слова ref и out являются частью сигнатуры метода перегруженными называются методы с одинаковыми именами, но с разной сигнатурой
Какие высказывания верны для полей класса:
поля класса используются для передачи информации методам класса поле класса всегда можно заменить функцией без аргументов поле класса иногда можно заменить функцией без аргументов
Формальный аргумент метода должен сопровождаться ключевым словом:
ref – если аргумент принадлежит к ссылочному типу out – если аргумент является выходным параметром метода in – если аргумент является входным параметром метода inout – если аргумент является обновляемым параметром метода
Отметьте верные утверждения:
любую процедуру можно записать в виде функции существование в классе методов с одним и тем же именем называется перегрузкой любую функцию можно записать в виде процедуры
Отметьте истинные высказывания
если формальный аргумент объявлен с ключевым словом out , то в теле метода ему должно присваиваться значение только процедуры и функции с атрибутом public являются методами класс фактический аргумент метода может быть выражением сигнатуры перегруженных методов должны совпадать
Метод является:
функцией, если тип возвращаемого значения отличен от void процедурой, если указан void как тип возвращаемого значения процедурой, если указан модификатор метода procedure функцией, если указан модификатор метода function
Правда ли, что:
методы родительского класса с модификатором private недоступны для вызова в методе, определяемом в классе потомка число фактических аргументов при вызове метода должно совпадать с числом формальных аргументов этого метода функция всегда вычисляет значение, возвращаемое в качестве результата
Чем отличаются процедуры от функций:
оператор return можно задавать только в функциях функция не может возвращать значение void функцию нельзя вызывать как оператор процедуру нельзя вызывать в выражениях
Почему при ОО-стиле программирования у методов класса мало аргументов:
на число аргументов накладываются ограничения модификатор params позволяет иметь один формальный аргумент, которому соответствует неограниченное число фактических аргументов основная информация передается методу и возвращается им через поля объекта, вызвавшего метод
Правда ли, что:
тело метода является блоком, представляющим последовательность операторов и описаний переменных, заключенную в фигурные скобки функцию нельзя вызывать как оператор типы формального и фактического аргумента должны быть идентичными
Отметьте истинные высказывания:
функции с побочным эффектом в языке C# не допускаются только функции являются методами класса если формальный аргумент объявлен с ключевым словом ref , то в теле метода ему должно присваиваться значение перегруженными называются методы с большим числом аргументов число формальных и фактических аргументов метода должно совпадать
В каких вызовах возникнет ошибка, если задано описание int x=1; int z=0; int p(int x, out int y){…}
p(77+z, out z) x=p(77+z, out z) x=p(77, out 77+z) x=p(out 77,z)
Метод можно описать на уровне:
класса пространства имен проекта решения
Функция с побочным эффектом:
изменяет значения аргументов, вызываемых по значению имеет выходные аргументы с ключевыми словами ref или out возвращает значение void вызывается как оператор
Для программы, вычисляющей сумму первых n элементов массива: S=A[0]; k=0; while(k !=(n-1)) { k++; S+=A[k];} инвариантом цикла являются
Отметьте истинное высказывание:
нерекурсивный вариант метода всегда предпочтительнее своего рекурсивного аналога рекурсивный вариант метода всегда следует заменять нерекурсивным аналогом если предусловие равно true , то метод корректен для любого постусловия если предусловие равно false , то метод корректен для любого постусловия
Постусловие метода
метод корректен, если для всех входов с истинным предусловием гарантируется истинность постусловия на выходе может иметь значение false может иметь значение true если на некотором входе в момент завершения метода постусловие не выполняется, то это всегда говорит об ошибке в работе метода представляет логическое выражение, связывающее входные и выходные аргументы, которое должно быть истинным в момент завершения метода
Методы P и Q называются взаимно рекурсивными:
если метод P вызывает метод Q если метод Q вызывает метод P если метод P вызывает метод Q , а метод Q вызывает метод P
Правда ли, что:
предусловие метода накладывает ограничение на входные данные рекурсивной называется программа с циклами корректность программы можно определить, только по отношению к ее спецификациям
Какие программы корректны по отношению к своим спецификациям?
в рекурсивной процедуре должна присутствовать нерекурсивная ветвь многопроцессорный современный компьютер решит задачу "Ханойские башни" в течение суток квадратичные методы сортировки, требующие O(n2) операций всегда работают медленнее, чем сортировки с порядком операций O(n*log(n)) каждый цикл имеет только один инвариант
Предусловие метода:
может иметь значение false может иметь значение true представляет логическое выражение, связывающее входные и выходные аргументы, которое должно быть истинным до начала выполнения метода невыполнение предусловия до начала выполнения метода всегда говорит об ошибке в работе метода
Для программы, вычисляющей сумму первых n элементов массива S=A[0]; k=0; while(k !=(n-1)) { k++; S+=A[k];} подходящими инвариантами цикла являются
Отметьте истинное высказывание:
если предусловие равно true , то метод корректен для любого постусловия если предусловие равно false , то метод корректен для любого постусловия рекурсивный вариант метода всегда следует заменять нерекурсивным аналогом нерекурсивный вариант метода всегда предпочтительнее своего рекурсивного аналога
Правда ли, что:
для того чтобы рекурсия не приводила к зацикливанию, в тело нормального рекурсивного метода всегда встраивается оператор выбора, одна из ветвей которого не содержит рекурсивных вызовов рекурсивную программу можно заменить программой с циклами предусловие и постусловие метода должны проверяться в начале и после завершения метода
Отметьте истинное высказывание:
незавершающийся метод тотально корректен рекурсивным называется метод, в теле которого содержится вызов другого метода цикл имеет сколь угодно много инвариантов
Правда ли, что:
из истинности инварианта цикла всегда следует истинность предусловия цикла вариант цикла является выражением булевского типа задание предусловий, постусловий, вариантов и инвариантов циклов является такой же частью процесса разработки корректного метода, как и написание самого кода из истинности инварианта цикла и условия завершения цикла всегда следует истинность постусловия цикла
Каждое выполнение тела цикла:
сохраняет постусловие цикла сохраняет предусловие цикла сохраняет инвариант цикла сохраняет вариант цикла
Отметьте правильные объявления:
object[][] mz = { new int[3], new double[4] };
double[] md = new double[5] = {1.5, 2.7, 3.9};
float[] mf = {1.5, 2.7, 3.9};
int[][,] mx = { new int[2,3], new int[3,2] };
int n = 10; string[,] ms = new string[n,2*n];
Отметьте истинные высказывания
элементы массива доступны для чтения и записи в массивы C# можно добавлять и удалять элементы объявления int[] и double[] задают один и тот же класс-массив если у метода формальный аргумент является массивом, то его можно вызывать по значению, опуская описатели ref или out, даже если его элементы меняются в теле метода, но не меняется сам массив (ссылка)
Какая из процедур вызовет ошибку периода трансляции?
public static void L1_V1_Q31(int[] A, int S) { S=0; for(int i =0; i<A.Length; i++) S+=A[i]; }
public static void L1_V1_Q32(ref int[] A, ref int S) { S=0; for(int i =0; i<A.Length; i++) S+=A[i]; }
public void L1_V1_Q33(val int[] A, val int S) { S=0; for(int i =0; i< A.Length; i++) S+=A[i]; return(S); }
public static int L1_V1_Q34(object[] A) { int S=0; foreach(int i in A) S+=(int)i; return(S); }
Размерность массива определяется:
числом его элементов числом его индексов по максимальному значению элементов
Правда ли, что:
в процедуре, которой передан массив в качестве аргумента, можно определить все характеристики этого массива в C# многомерный массив и массив массивов – это два разных вида массивов константные массивы можно использовать только при инициализации массивов
Отметьте правильные объявления:
object[][] z2 = new object[3][]; double[,] w1 = new double[3,3]; double[][] z1 = new double[3][]; double[] v1 = {1,2,3}, v2={3,4,5}, v3={6,7,8};
Отметьте истинные высказывания:
в языке C# переменные m1 и m2, являющиеся массивами с разным числом элементов всегда принадлежат разным классам процедура – функция в C# может возвращать массив в качестве результата в языке C# переменные m1 и m2, являющиеся массивами с разными типами элементов всегда принадлежат разным классам массив массивов является более общей структурой данных, чем многомерный массив
Отметьте истинное высказывание:
массив массивов позволяет задать многомерный массив в языке C# переменные m1 и m2, являющиеся массивами, всегда принадлежат одному классу в языке C# для массивов не допускается отложенная инициализация
Какие из процедур корректно вычислят сумму переданного им массива int?
public static void L1_V1_Q31(int[] A, int* S) { S=0; for(int i =0; i< A.Length; i++) S+=A[i]; }
public static void L1_V1_Q32(ref int[] A, ref int S) { S=0; for(int i =0; i< A.Length; i++) S+=A[i]; }
public void L1_V1_Q33(val int[] A, val int S) { S=0; for(int i =0; i< A.Length; i++) S+=A[i]; return(S); }
public static int L1_V1_Q34(object[] A) { int S=0; foreach(int i in A) S+=(int)i; return(S); }
При инициализации массива задание конструктора обязательно
для одномерных массивов для многомерных массивов для массива массивов
Правда ли, что:
элементы константного массива следует заключать в квадратные скобки если массив объявляется без инициализации, то создается только висячая ссылка со значением void для динамических массивов можно указать нижнюю и верхнюю границу изменения индексов
Правда ли, что:
если массив объявляется без инициализации, то создается только висячая ссылка со значением null для динамических массивов можно указать нижнюю и верхнюю границу изменения индексов элементы константного массива следует заключать в квадратные скобки
Отметьте верные утверждения:
массивы C# являются динамическими запись T[] следует понимать как одномерный массив с элементами типа T значения элементов массива можно не инициализировать при первом использовании
Внимание ! Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier! Пусть x – объект класса int[]. В вызове x.M роль M может играть:
свойство Length метод GetLength метод CopyTo
Пусть массив x принадлежит классу double[][]. В вызове x.M роль M может играть:
метод GetLength свойство Length метод Sort метод Copy метод CopyTo
Отметьте истинные высказывания:
все классы-массивы являются прямыми потомками класса Array все статические методы класса Array определены только над одномерными массивами в цикле For Each допустимо только чтение элементов массива между классами-массивами и классом object[] существуют взаимные неявные преобразования
Пусть процедура ItWorks имеет следующий заголовок: public void ItWorks(int[] A). Какой массив может быть передан ей в качестве аргумента?
int[] x byte[] y string[] s Person[] p; (Person – класс, определенный пользователем).
Для того чтобы было возможным преобразование массива с элементами класса S в массив с элементами класса T, необходимо
массивы должны иметь одинаковое число элементов размерности массивов должны совпадать классы S и T должны быть значимого типа классы S и T должны быть ссылочного типа
Правда ли, что:
над массивами определены операции поиска элементов и сортировки класс Array является абстрактным классом массив можно рассматривать как коллекцию и использовать для просмотра цикл foreach
Отметьте истинные высказывания:
все классы-массивы являются прямыми потомками только одного родительского класса все классы-массивы наследуют свойства и методы своих предков - двух классов и четырех интерфейсов метод Sort позволяет сортировать любые массивы если S и T принадлежат разным классам – массивам, то присваивание S=T недопустимо
Пусть процедура ItWorks имеет следующий заголовок: public void ItWorks(object[] A) .Какой массив может быть передан ей в качестве аргумента?
string[] s Person[] p; (Person – класс, определенный пользователем Anketa[] a; (Anketa – структура, определенная пользователем int[] x
Статические методы класса Array
перегружены применимы ко всем массивам позволяют выполнять операции над матрицами – умножение, обращение, вычисление определителя
Правда ли, что:
допустимо присваивание x=e; (передача аргументов в процедуру), где x и e – это массивы разных классов методы класса Array позволяют закрыть его на время обработки, запрещая его модификацию другим потоком если формальный аргумент метода принадлежит классу object, то фактический аргумент не может быть массивом
Отметьте правильные объявления:
char[] d = {'a','b','c','d'}; char b = "b";/2 char a = new char("a"); char[] c = new char[5];
Отметьте истинные высказывания:
неинициализированные символы массива char[] имеют нулевой код в массив char[] можно вставлять новые символы существует явное преобразование переменных целочисленного типа в символы char в массиве char[] можно заменять символы
Даны объявления: string s = "Hello, Dolly!"; const int size =15; char[] c0 = new char[size], c1= new char[size]; char[] c2 = new char[size], c3= new char[size]; char[] c4 = new char[size]; Группа операторов выполняется после этих объявлений. Отметьте операторы, не приводящие к ошибке на этапе выполнения:
неявное преобразование в тип byte неявное преобразование в тип int метод ToString для преобразования в тип string неявное преобразование в тип string
Правда ли, что:
метод IndexOf класса Array применим к строкам в языке C# возможно объявить переменную типа char* массив char[] позволяет работать со строкой постоянной длины
Даны объявления:
char ch = 'A'; char[] ar ={'B', 'C', 'D'}, ar1= new char[3]; Отметьте синтаксически корректные операторы:
переменной типа string можно присвоить константу типа char тип char* можно объявлять только в небезопасных блоках и при условии, что проект скомпилирован с опцией unsafe если проект скомпилирован с опцией unsafe, то тип char* можно объявлять в любом блоке типы char и string относятся к ссылочным типам существует метод в классе string, преобразующий строку в массив символов
Для строки s типа string запись s[i]
означает символ строки типа char означает символ строки типа string не определена
Отметьте правильные объявления:
char[] e = new char[4]{'a', 'b', 'c', 'd'}; int n = 4; char[] g = new char[n]{'a','b','c','d'}; char f1;
Выберите правильные варианты ответа. Переменная класса char[] может вызывать следующие методы и свойства
ToString GetSymbol CopyTo GetType Value
Правда ли, что:
все 26 букв латинского алфавита в кодировке Unicode плотно упакованы класс char имеет динамический метод CompareTo, выдающий в случае несовпадения символов расстояние между ними/1 все 33 буквы кириллицы в кодировке Unicode плотно упакованы
Правда ли, что:
статический метод IsLetterOrDigit класса char возвращает true, если символ является буквой или цифрой большинство статических методов класса char перегружены все методы класса char являются статическими
Отметьте фрагменты, в которых не возникнут ошибки при компиляции и выполнении:
string c1= new string(); int n = 5; string c3= new string ('a', 2*n); char[] car = new char[3]; car[1] ='a'; car[2] ='b'; string s =new string(car,0,2); string c2= new string("ABC");
Отметьте правильные высказывания:
присваивание s[i] = ch; где s класса string, а ch – переменная класса char, недопустимо при присваивании строк s = s1 создается дополнительная ссылка на объект, связанный с s1 константы “\\c\x58” и @”\cX” эквивалентны
Какие высказывания справедливы для класса StringBuilder?
строки string можно присваивать строкам StringBuilder классы string и StringBuilder относятся к изменяемым классам емкость буфера автоматически возрастает, если размер строки превосходит емкость буфера у класса StringBuilder нет конструктора без параметров у класса StringBuilder нет операции "+" – конкатенации
Строки класса StringBuilder создаются тогда, когда
требуется выполнять над строками операции поиска вхождения отдельных символов или подстрок требуется изменять значение строки, не создавая новой строки длина строки заранее неизвестна
Правда ли, что:
операция конкатенации (+) не определена над строками класса StringBuilder емкость буфера, отводимой строке класса StringBuilder всегда равна 1Кб в C# существуют два вида строковых констант
Отметьте правильное высказывание:
операция (s+s1) определена только над строками, содержащими числа эквивалентность строк (s ==s1) означает совпадение ссылок s и s1 у класса string нет статических методов получить i-й символ строки, используя операцию взятия индекса s[i], недопустимо аргументы в методе Format позволяют задать ссылку и способ форматирования объектов, вставляемых в строку
Изменить значение строки класса string
вообще невозможно можно только используя динамические методы класса можно только используя статические методы класса
Правда ли, что:
метод Join позволяет воссоздать строку в исходном виде, расщепленную методом Split метод Format может вызываться с разным числом параметров существуют константы класса StringBuilder
Объект класса можно создать:
конструктором, которому передается объект char[] конструктором, которому передается объект string конструктором по умолчанию без явного вызова конструктора
Какие высказывания справедливы для класса StringBuilder?
у переменной класса StringBuilder нужно вызвать метод ToString, чтобы присвоить ее значение переменной класса string строки StringBuilder можно создавать конструктором, передавая ему объект string в качестве фактического параметра недопустимо присваивание s[i] = ch; где s – строка класса StringBuilder, ch – переменная класса char класс StringBuilder принадлежит изменяемым классам/
Отметьте правильное высказывание:
присваивание ch =s[i]; где s класса string, а ch – переменная класса char, недопустимо константы “\c\x58” и @”\cX” эквивалентны метод Join всегда позволяет восстановить исходную строку, расщепленную методом Split аргументы в методе Format позволяют задать ширину области для вставляемого объекта
Правда ли, что:
в C# существуют классы, для которых невозможно изменить значение объекта при вызове его методов метод Split разделяет слово на символы строки класса StringBuilder имеют собственный буфер
Словом будем называть непустую последовательность букв кириллицы, обрамленную белыми пробелами. Какой образец распознает слова, соответствующие этому определению?
образец@"\w+"распознает непустую последовательность букв и цифр у класса Regex есть метод Match свойство Success метода Match в случае успеха распознавания возвращает найденную строку Знаки + и - в образце должны задаваться в виде \+ и \- образец @"\w+"распознает непустую последовательность букв и цифр, начинающуюся с буквы
Какие слова принадлежат языку, заданному регулярным выражением: @“\w\s=\s\w+(\+|\-\w+)+”?
x=y+z 7 = 5-2 x = 2 + y – 7 x1 = z-x
Класс Regex имеет
открытый конструктор по умолчанию защищенный конструктор по умолчанию открытый конструктор с аргументом типа string защищенный конструктор с аргументом типа string
Правда ли, что:
метод Match класса Regex запускает поиск в заданной строке первого вхождения подстроки, удовлетворяющей образцу поиска методMatch класса Regex запускает поиск в заданной строке всех вхождений подстроки, удовлетворяющей образцу поиска метод Matches класса Regex запускает поиск в заданной строке всех непересекающихся вхождений подстроки, удовлетворяющей образцу поиска
Отметьте правильные высказывания:
объекты класса Match создаются конструктором с параметрами для работы с регулярными выражениями в .Net Framework включено пространство имен RegularExpressions регулярные выражения задают специальный класс языков регулярное выражение задает шаблон поиска подстроки в строке текста объект Match создается при вызове метода Match
Какие слова принадлежат языку, заданному регулярным выражением: @“[A-Za-z]\w+=\w+[\+|\-|\*]\w+”
U=v+w a = b-c Agent007=James-Bond x=u+v+w xyz=2x*y5
Слова языка LD задаются непустой последовательностью целых чисел, разделенных знаками арифметических операций, например 155/33+17-5*23+7. Какое регулярное выражение описывает этот язык?
Для выделения из текста подстроки, состоящей из трех символов, в которой первый и третий символы являются буквами т или к, а второй символ произвольной буквой кириллицы в нижнем регистре, следует использовать шаблон:
@"т|к.т|k" @"[т|к][а-я][т|к]" @"[т|к]?[т|к]"
Отметьте правильные высказывания:
регулярное выражение позволяет определить, принадлежит ли строка языку, заданному регулярным выражением метод Matches находит все непересекающиеся вхождения подстрок, удовлетворяющие шаблону регулярное выражение позволяет определить, является ли одна строка частью другой строки регулярное выражение позволяет определить, есть ли в строке подстрока, удовлетворяющая шаблону, заданному регулярным выражением метод Matches находит все вхождения подстрок, удовлетворяющие шаблону
Какие слова принадлежат языку, заданному регулярным выражением: @ “[a-zA-Z]\w*\s*=\s*\w+(\s*\+\s*\w+)+”
XYZ = 2 + 3 + 7 x5 = 5x x=y+z/1 5y= y5/1 Agent007 = James + Bond
Для выделения из текста подстроки, в которой x и y разделены знаком операции + или -, следует использовать шаблон:
@"(x+y)|(x-y)" @"x[\+|\-]y" @"x[+|-]y"
Какие из трех образцов: @"\s*[а-я]+\s", @"[А-Яа-я]+", @"\s[А-Яа-я]+\s" включат слово "папа" в результат найденного соответствия при поиске в строке "папа мама и я":
все три образца ни один из образцов 2-й и 3-й 1-й и 2-й
Какие слова принадлежат языку, заданному регулярным выражением: @“\w\s=\s\w+(\+|\-\w+)+”?
7 = 5-2 x = 2 + y - 7 x=y+z/1 x1 = z-x/1
Чтобы получить объект Match можно:
объявить объект Match без инициализации, создать объект класса Regex, вызвать метод Match и его результат присвоить объекту Match создать его, передав конструктору регулярное выражение/1 создать объект класса Regex, вызвать метод Matches и выбрать нужный объект из коллекции/1 объявить объект Match без инициализации, создать объект класса Regex, вызвать свойство Group и у полученной группы вызвать свойство Match, результат которого присвоить объекту Match
Слова языка LV задаются непустой последовательностью однобуквенных имен в латинице, разделенных знаками арифметических операций, например x/z+c-v*b+n. Какое регулярное выражение описывает этот язык?
только один конструктор только конструктор по умолчанию не более одного статического конструктора не более одного закрытого конструктора несколько конструкторов с одинаковой сигнатурой
Отметьте истинные высказывания:
каждый объект содержит набор из всех полей, определенных в классе создание объекта выполняется операцией new с вызовом конструктора класса для реализации стратегии доступа к закрытым полям класса используются методы-свойства
Поля класса:
обычно закрываются могут иметь модификатор static закрытые поля недоступны методам класса могут иметь любой из модификаторов доступа: public, private, protected, internal
В Visual Studio 2005 (Framework 2.0) для класса разрешается определять:
операции произвольной арности только бинарные операции унарные и бинарные операции только унарные операции
Правда ли, что:
статические поля представляют общий информационный пул для всех объектов классов, позволяя извлекать и создавать общую информацию конструктор не может быть объявлен с атрибутом private для класса C# нельзя задать деструктор
Отметьте истинные высказывания:
любые методы класса могут вызывать статические методы класс не может иметь закрытых методов конструкторы класса вызываются автоматически у класса может быть только индексатор с именем this, возможно перегруженный
Метод-Свойство класса
может включать методы get и set обязательно должно быть указано для каждого закрытого поля класса может иметь атрибут доступа private включает только один из методов get или set позволяет реализовать различные стратегии доступа к закрытым полям класса
При определении собственных классов можно задать:
конструкторы с атрибутами private и protected только конструкторы с атрибутом public статический конструктор
Правда ли, что:
независимо от значения атрибута доступа, все методы и поля класса доступны для не статических методов класса для класса нельзя задать собственные константы клиент не может получить прямой доступ к закрытым полям класса, но может получить доступ к ним, например через методы-свойства класса
Правда ли, что:
методы-свойства обеспечивают различные стратегии доступа к закрытым полям класса статическое поле с атрибутом readonly может использоваться в качестве константы класса индексатор – это специальный инструментарий, нумерующий методы класса
Закрытые методы класса
позволяют клиентам не вникать в детали реализации составляют интерфейс класса не могут быть вызваны клиентами
Тело класса может содержать описание:
интерфейсов полей классов пространств имен методов событий
Объекты класса Rational могут быть созданы в клиентском классе
конструктором с аргументами конструктором по умолчанию закрытым конструктором статическим конструктором
Отметьте истинные высказывания:
для класса можно задать несколько операций статическое поле класса доступно в любом методе класса у класса может быть задано несколько индексаторов с разными именами статический конструктор класса вызывается автоматически у класса может быть задано несколько методов-свойств
Какие утверждения справедливы для развернутых и ссылочных типов
классы относятся к ссылочным типам объектам развернутого типа память отводится в куче в языке C# есть модификатор expand, позволяющий отнести класс к развернутому типу структуры относятся к развернутым типам
Отметьте истинные высказывания
все значимые типы языка C# реализованы структурами объект развернутого типа не разделяет отведенную ему память ни с каким другим объектом присваивание структур является ссылочным присваиванием
При создании объектов перечислений
нельзя вызывать конструктор требуется их явная инициализация объекты получают значение, даже если инициализация не задана
Базовый класс для перечисления
всегда задается по умолчанию может быть задан по умолчанию может быть классом string
Правда ли, что:
константы разных перечислений могут совпадать в качестве базового класса для перечисления можно задать класс char структура может быть родительским классом для другой структуры
Отметьте истинные высказывания:
сложение точки – структуры Point с размером – структурой Size дает новую точку у структуры нет конструкторов у структуры нет наследников сложение двух точек – структур Point создает линию – структуру Line
Даны объявления структур:
Point pt1 = new Point(3,5),pt2; Size sz1 = new Size(7,10), sz2;
класс без собственных методов абстрактный класс класс без собственных полей
Отметьте верные утверждения.
класс int является структурой никакие операции не определены над объектами перечислений метод ToString для объекта перечисления возвращает его значение, преобразованное в строку
Какие утверждения справедливы относительно взаимных преобразований структур в классы
для преобразования класса в структуру иногда необходимо изменить конструктор класса для преобразования класса в структуру всегда необходимо изменить конструктор класса для преобразования класса в структуру иногда достаточно заменить слово class словом struct для преобразования класса в структуру всегда достаточно заменить слово class словом struct для преобразования структуры в класс достаточно заменить слово struct словом class
Особенностями структур являются
поля структуры не могут быть инициализированы в момент объявления для структур нельзя создать собственный конструктор без аргументов структуры не могут наследовать интерфейсы структуры могут наследовать интерфейсы
Отметьте истинные высказывания
структуры и перечисления – частные случаи классов перечисление наследует методы класса object структура наследует методы класса object поля структуры не могут быть ссылками
Дано перечисление enum TC {red, blue, yellow} и три переменных c1, c2, c3 этого класса. В результате присваиваний: с1 = TC.yellow; c2 = TC.blue; c3 = c1 | c2; переменная с3 получит значение
red blue yellow ни одно из этих значений
Дано перечисление enum TC {red, blue, yellow} и три переменных c1, c2, c3 этого класса. В результате присваиваний: с1 = TC.yellow; c2 = TC.blue; c3 = c1 | c2; эти переменные получат следующие значения базового типа:
0, 1, 2 2, 1, 3 1, 2, 3 2, 1, 0
Для классов клиентов и поставщиков справедливы утверждения:
у класса поставщика может быть много клиентов клиент может быть собственным клиентом отношение «клиент-поставщик» – задает отношение «является» поставщик может быть собственным поставщиком у класса клиента может быть много поставщиков отношение «клиент-поставщик» – задает отношение «имеет»
Отметьте истинное высказывание:
класс называется абстрактным, если он не вводит собственных полей данных если метод класса А объявлен с модификатором virtual, то для него применяется статическое связывание у класса может быть несколько непосредственных родительских классов у класса может быть только один непосредственный потомок в проектах на C# контроль типов выполняется на этапе компиляции
В родительском классе описан метод public void M(int x) {}. Какие объявления в классе потомке вызовут ошибки или предупреждения на этапе компиляции?
public void M(int x){} private new void M(int x){} public new void M(int x, int y){} public override void M(int x) {} public new void M(int x) {}
Класс А является клиентом класса B
если методы и или поля класса A вызываются в методах класса B если методы и или поля класса B вызываются в методах класса A если у класса A есть поле, являющееся объектом класса B
Правда ли, что:
поле класса может быть объектом описываемого класса при вызове конструктора класса ему может быть передана ссылка на создаваемый конструктором объект потомкам доступны все поля и методы родительского класса
Для классов родителей и потомков справедливо следующее утверждение:
у родительского класса может быть несколько непосредственных потомков у класса потомка может быть несколько непосредственных родительских классов класс родитель может быть сам себе родитель класс потомок может быть собственным потомком
В родительском классе описан метод 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 override void M(int item){} public new void M(int x){} public override virtual void M(int x){} public virtual void M(int x, int y){}
Если метод родительского класса объявлен с атрибутом virtual, то потомок класса:
обязан переопределить реализацию метода обязан переопределить сигнатуру метода может наследовать реализацию класса
Пусть задано описание интерфейсов: 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,IN{string IP.M(string s){return (s+s);} string IP.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();}} 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{string IP.M(string s){return (s+s);} string IP.M1(int x){return x.ToString();}public int M (int s) { return s++;}}
Отметьте истинные высказывания
для того чтобы объекты собственного класса сравнивать на «больше» и «меньше», необходимо сделать класс наследником интерфейса IComparable для того чтобы объекты собственного класса можно было клонировать, необходимо сделать класс наследником интерфейса ICloneable для того чтобы объекты собственного класса можно было сериализовать, необходимо сделать класс наследником интерфейса ISerializable методы разных интерфейсов с одинаковой сигнатурой можно «склеивать» в классе наследнике, назначая им одну реализацию реализация метода Clone позволяет организовать глубокое клонирование
При наследовании интерфейсов
класс наследник должен реализовать хотя бы один из его методов объекты интерфейсного типа создаются стандартным путем с помощью конструктора может выполнить склейку методов с разной сигнатурой класс наследник может выполнить склейку методов с одинаковой сигнатурой объекту интерфейсного типа доступны закрытые методы интерфейса, реализованные в классе класс наследник может выполнить переименование методов интерфейса
Глубокое клонирование
невозможно из-за проблемы зацикливания возможно только для фиксированного уровня возможно
Правда ли, что:
метод MemberwiseClone, наследуемый от прародителя object, не может быть вызван у клиента для полного управления процессом сериализации класс должен наследовать интерфейс ISerializable класс, наследующий интерфейс, не обязан реализовать все методы интерфейса
Отметьте истинные высказывания
интерфейс может быть наследником нескольких интерфейсов из-за коллизии имен дублируемое наследование интерфейсов запрещено один класс может наследовать несколько интерфейсов один интерфейс может наследоваться несколькими классами
Ключевое слово interface в языке C# задает описание:
пользовательского интерфейса класса открытой части класса частного случая класса абстрактного класса
Класс с атрибутом Serializable
при вызове форматером метода Serialize выполняет глубокую сериализацию, если класс не является наследником интерфейса ISerializable облегчает организацию обмена данными с удаленным приложением позволяет сохранять данные в текстовом формате должен быть наследником интерфейса ISerializable допускает два формата сериализации данных
Отметьте истинные высказывания
при наследовании двух интерфейсов имена их методов должны быть различными слово «интерфейс» имеет разный смысл в зависимости от контекста при наследовании интерфейса ICloneable необходимо реализовать методMemberwiseClone несколько интерфейсов могут быть наследниками одного и того же интерфейса множественное наследование интерфейсов дает те же возможности, что и множественное наследование классов
Интерфейс ISerializable
автоматически реализует глубокую сериализацию позволяет управлять процессом сериализации имеет два метода, которые должен реализовать класс, наследующий интерфейс конфликтует с атрибутом класса Serializable
Интерфейс отличается от абстрактного класса тем, что:
у абстрактного класса все методы абстрактны, а у интерфейса некоторые методы могут иметь реализацию потомок может иметь в качестве родителя несколько интерфейсов, но только один абстрактный класс у интерфейса все методы абстрактны, а у абстрактного класса некоторые методы могут иметь реализацию
Правда ли, что:
при множественном наследовании классов проблем больше, чем при множественном наследовании интерфейсов ситуация дублирующего наследования для интерфейсов не возникает для реализации интерфейса IComparable наследнику достаточно реализовать всего один метод CompareTo(object obj)
Пусть задано описание интерфейса и класса: 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++);}}. Какие из объявлений в клиентском классе выполнимы
IP it5 = (IP) new C1(); string s= "ss"; s = it5.M(s)/2/4 IP it4 = new IP(); string s= "ss"; s = it4.M(s)/1/2/3 C1 it3 = new C1(); string s ="ss"; s =((IP)it3).M(s)/1/4 C1 it2 = new C1(); string s ="ss"; s =it2.IP.M(s)/1/3/4 C1 it1 = new C1(); it1.M(7777)/3
Правда ли, что:
создать объект класса интерфейса обычным путем с использованием конструктора и операции new нельзя различают три типа клонирования: поверхностное (shallow), глубокое (deep) и сверхглубокое (overdeep) под десериализацией понимают процесс восстановление состояния объектов, хранимых в долговременной памяти
Дано объявление делегата: public delegate double D (double x); Какие объявления его экземпляров будут корректны в определенном контексте?
D d5 = new D(f3) D d3 = new D(x.f1) D d4 = new D(Person.f2) D d1 = new D(Math.Sin)
Отметьте истинные высказывания:
класс Delegate является наследником интерфейса ICloneable; класс Delegate является наследником интерфейса ISerializable операции + и – позволяют оперировать со списком вызова делегатов метод Combine возвращает в качестве результата объект того же типа, что и экземпляр делегата, вызвавшего метод
единственную нетипизированную ссылку на метод совокупность ссылок - на метод с жестко фиксированной сигнатурой, заданной делегатом, на объект, вызвавший метод, на список присоединенных делегатов единственную ссылку на метод с жестко фиксированной сигнатурой, заданной делегатом
Правда ли, что:
делегат может быть реализован в виде метода-свойств с экземпляром делегата может быть связана не одна функция, удовлетворяющая его сигнатуре, а целый набор таких функций делегаты допускают перегрузку реализация событий основана на делегатах
Отметьте истинные высказывания:
каждый экземпляр делегата обладает методом GetInvocationList над делегатами определена операция умножения * язык C# позволяет построить делегата непосредственным наследованием от абстрактного класса Delegate абстрактный класс Delegate определен в библиотеке FCL
delegate int T(int x1, ref int x2) public class D = delegate void(string s) Delegate D1 = new Delegate( void(string s) public delegate T1(int x)/1 public delegate void D2 (string s)/1
При построении программной системы методом раскрутки
для того, чтобы функциям внутреннего слоя были доступны функции внешних слоев, необходимо задание контракта во внутреннем слое, которому должны удовлетворять функции внешних слоев для того, чтобы функциям внешнего слоя были доступны функции внутренних слоев, необходимо задание контракта во внешнем слое, которому должны удовлетворять функции внутренних слоев функциям внешнего слоя доступны без ограничений функции внутренних слоев функциям внутреннего слоя доступны без ограничений функции внешних слоев
Правда ли, что:
класс Delegate не допускает создания потомков в программах на C# пара функций f и g называются функциями обратного вызова, если они взаимно вызывают друг друга наследование является альтернативой обратному вызову
Реализация экземпляра делегата в виде метода-свойства:
позволяет скрыть его от клиента иметь один экземпляр вместо нескольких динамически связывать экземпляр с методом экономить память
Правда ли, что:
функцией высшего порядка называется такая функция (метод) класса, у которой один или несколько аргументов принадлежат к функциональному типу каждая функция (метод), сигнатура которого совпадает с сигнатурой делегата, может рассматриваться как экземпляр класса, заданного делегатом над делегатами определены четыре операции (+, -, *, /)
Процедура, в которой вызывается событие
передает обработчику событий входные аргументы и ждет окончания работы всего списка обработчиков, связанного с событием передает обработчику событий входные аргументы и продолжает свою работу может использовать в своей работе выходные аргументы события, значения которых сформированы обработчиками события передает обработчику событий входные аргументы и ждет окончания работы первого обработчика, связанного с событием
Отметьте истинные высказывания
для связывания событий с обработчиком можно применять только операцию += для класса с большим числом событий целесообразно применять динамическое связывание все события имеют одинаковую сигнатуру из двух аргументов с одними и теми же типами все события, не имеющие собственных аргументов, передаваемых обработчику, соответствуют стандартному встроенному делегату EventHandler все события имеют сигнатуру из двух аргументов, но с отличающимися типами
Класс EventHandler
задает сигнатуру события является потомком класса Delegate является абстрактным классом и не может иметь экземпляров является классом, которому принадлежат все события является родительским классом для событий, не имеющих собственных аргументов
Для событий, допустимых в каркасе Framework .Net, к делегатам предъявляются следующие ограничения
сигнатура делегата фиксируется число возможных событий ограничено события могут обрабатываться объектами только одного класса
Правда ли, что:
делегат, задающий тип события, может иметь произвольную сигнатуру класс, обрабатывающий события, может отсоединить обработчики событий других классов, чтобы они не мешали его работе обработчику события передаются входные аргументы, характеризующие событие, а он может передать объекту, создавшему событие, выходные аргументы
Все аргументы события принадлежат
классу EventArgs классу EventArgs, за исключением аргумента, задающего объект, зажигающий событие потомку класса EventArgs потомку класса EventArgs за исключением аргумента, задающего объект, зажигающий событие возможно разным классам
Сообщение о событии получает:
только один объект одного класса, имеющего обработчик события, присоединенный к объекту, задающему событие несколько объектов одного класса, имеющего обработчик события, присоединенный к объекту, задающему событие все объекты одного класса, имеющего обработчик события, присоединенный к объекту, задающему событие все объекты всех классов, имеющих обработчики события, присоединенные к событию
Объявление события в классе может представлять собой:
объявление метода-свойства класса, включающего методы get и set объявление метода класса объявление метода-свойства класса, включающего методы add и remove объявление поля класса
Правда ли, что:
класс-отправитель сообщения обязан знать всех своих получателей сообщение о событии следует посылать только тогда, когда гарантируется, что есть хотя бы один получатель сообщения класс получатель должен иметь обработчик события – процедуру, согласованную по сигнатуре с функциональным типом делегата, задающего событие
Зажечь событие – это значит:
послать сообщение о событии всем объектам – получателям сообщения вызвать специальную процедуру, обрабатывающую событие закончить работу, передав управление операционной системе
Объекты одного класса
в разных сеансах работы зажигают одинаковый набор событий в процессе вычислений зажигают набор событий, характерный для объекта имеют одинаковый набор событий в разных сеансах работы зажигают разные события в процессе вычислений зажигают одинаковый набор событий
Отметьте истинные высказывания
объект может определять, обрабатывать ли событие и какой из обработчиков присоединять к событию объект, обрабатывающий событие, может отсоединить других обработчиков события и полностью определить реакцию на событие все события имеют одну и ту же сигнатуру метод GetInvocationList используется при обработке событий
Обработчик события
может принадлежать классу, вызывающему событие всегда принадлежит классу, вызывающему событие никогда не принадлежит классу, вызывающему событие принадлежит только одному классу, слушающему событие может принадлежать многим классам, слушающим события
Отметьте истинные высказывания
методы Combine и Remove, наследованные от класса Delegate не применимы к событиям к каждому событию должен быть присоединен хотя бы один обработчик события события – это специализированный вариант делегатов допустимо динамическое связывание событий с обработчиками событий
Правда ли, что:
стандартные интерфейсные объекты обладают набором предопределенных событий при зажигании события выполнение метода прерывается, пока не закончат работу все обработчики события если обработчику события не передаются дополнительные аргументы, то можно пользоваться стандартным делегатом с именем EventHandler объекты классов, создав
Вы можете обратится к нам напрямую, через:
По Skype: molodoyberkut По Telegram: @MolodoyBerkut По ICQ: 657089516