rb_zach_vopr

advertisement
1
2
3
4
1. Каков результат компиляции и выполнения приведенного ниже кода?
static void Main(string[] args)
{
Console.WriteLine(GetSomeResult(10000));
}
static long GetSomeResult(long someValue)
{
long value1 = 10 * 1000 * 10000 * someValue;
long value2 = 10 * 1000 * 10000 * 100000;
return value2 / value1;
}
Ответ: из-за строчки long value2 = 10 * 1000 * 10000 * 100000 возникает ошибка компиляции (переполнение int), поскольку вычисления
производятся в int арифметике до присвоения значения переменной value2. Чтобы ошибки не возникало, нужно использовать один из
параметров типа long, для этого можно явно указать литеру L у одного из чисел long value2 = 10 * 1000 * 10000 * 100000L;
Какое значение присвоено x, если приведенный ниже код выводит False?
float x;
Console.Write(x == x)
Ответ: по спецификации это особенность NaN. Т.е. float x = float.NaN;
Почему следующий код выводит False?
public static void Main()
{
Test t = new Test();
Console.WriteLine(t.Equals(t));
}
Ответ: этот вопрос - ловушка для людей ожидающих подвоха. Описанное поведение можно воспроизвести опледелив класс Test следующим
образом: public class Test { public bool Equals(Test t) { return false; } }. Общее правило, которое подчеркивает эта задача - не стоит
переопределять поведение методов с одинаковыми названиями - это обязательно запутает пользователей кода.
Что будет выведено на экран при выполнении приведенного ниже кода?
static void Main(string[] args)
{
char a = 'a';
int b = 0;
Console.WriteLine(true ? a : b);
1
}
Ответ: 97. Типы операндов не совпадают и компилятор приводит переменные к общему совместимому типу Int32.
5
6
7
8
9
Что следует ожидать на экране?
Console.WriteLine("A" + "B" + "C");
Console.WriteLine('A' + 'B' + 'C');
Ответ: ABC 198. Конкатенация для символов не определена, поэтому будут получены числовые значения, затем просуммированы.
Циклическая инициализация полей? Интересненько, а в результате что будет на консоли выведено?
public class A { public static int x = B.y + 1; }
public class B { public static int y = A.x + 1; }
static void Main(string[] args)
{
Console.WriteLine("A.x = " + A.x);
Console.WriteLine("B.y = " + B.y);
}
Ответ: A.x = 2 B.y = 1. Тут все просто: вызывается конструктор A, затем конструктор B, но т.к. не определено значение A.x, то для
используется 0 в конструкторе B.
Инкремент, инкремент, а что же будет?
int j = 0;
for (int i = 0; i < 10; i++)
j = j++;
Console.WriteLine(j);
Ответ: 0. Подлый вопрос, поскольку тут внимание отвлекает ++. Но, на деле, оператор ++ возвращает значение переменной до
инкрементации, поэтому j сохраняет исходное значение. (код, по сути, аналогичен z = j; j = j + 1; j = z ).
Что будет выведено в результате выполнения цикла?
int end = int.MaxValue;
int begin = end - 100;
int counter = 0;
for (int i = begin; i <= end; i++)
counter++;
Console.WriteLine(counter);
Ответ: цикл бесконечный по определению - все значения int меньше или равны int.MaxValue.
Что будет выведено в результате выполнения цикла?
float begin = 1000000000;
int counter = 0;
2
10
11
12
13
for (float i = begin; i < (begin + 10); i++)
counter++;
Console.WriteLine(counter);
Ответ: бесконечный цикл. Для таких больших значений float нет разницы между begin + 1 и begin + 10. Вообще, использовать не целые
счетчики циклов - моветон и дорога в ад.
Какой метод выберет компилятор?
class A { public void Test(int n) { Console.WriteLine("A"); } }
class B : A { public void Test(double n) { Console.WriteLine("B"); } }
static void Main(string[] args)
{
B b = new B();
b.Test(5);
}
Ответ: В. Приоритет отдается методу класса, по типу ссылки, если в нем определен метод с типами аргументов позволяющих выполнить
преобразование без потерь.
Какой метод выберет компилятор?
public class Test
{
public Test(object obj) { Console.WriteLine("object"); }
public Test(int[] obj) { Console.WriteLine("int[]"); }
}
public static void Main() { Test t = new Test(null); }
Ответ: Int[]. Компилятор при определении вызова не использует текущее значение, а выбирает наиболее «специфический» конструктор. Нужно
явно указать указать тип, если есть желание вызвать конструктор object: new Test((object)null);
Что будут выведено на экран в результате выполнения кода приведенного ниже?
List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
List<int> all = list.FindAll(
i => { Console.Write(i); return i < 3; }
);
Ответ: 12345. Делегат, переданный методу FindAll вызывается для каждого элемента. Вопрос на внимательность, поскольку делегат
используется как фильтрующая функция, применяемая к каждому элементу.
Что будут выведено на экран в результате выполнения кода приведенного ниже?
List<int> list = new List<int>() { 1, 2, 3 };
var x = list.GroupBy(i => { Console.Write(i); return i; });
var y = list.ToLookup(i => { Console.Write(i); return i; });
Ответ: 123. Выполнение GroupBy отложено до обращения к результату. Вывод 123123 будет если дописать, например, строку var z =
3
x.ToArray();
14 Что будет выведено на экран в каждом из трех случаев, приведенных ниже:
А)
try {
Console.WriteLine("Hello ");
return;
}
finally { Console.WriteLine("Goodbye "); }
Console.WriteLine("world!");
Ответ: Hello Goodbye. Finally выполняется даже если выполнение прервано по return.
Б)
try {
Console.WriteLine("Hello ");
Thread.CurrentThread.Abort();
}
finally { Console.WriteLine("Goodbye "); }
Console.WriteLine("world!");
Ответ: Hello Goodbye. Abort выбрасывает исключение ThreadAbortException, которое обрабатывается finally, затем выполнение прерывается.
В)
try {
Console.WriteLine("Hello ");
System.Environment.Exit(0);
}
finally { Console.WriteLine("Goodbye "); }
Console.WriteLine("world!");
Ответ: Hello. Выполнение программы прерывается в точке вызова System.Environment.Exit(0) и управление передается ОС. Слишком жестко
наступаем песне на горло.
15
Что будет выведено в консоли в результате выполнения следующего кода (и почему):
byte b1 = 1, b2 = 2;
byte b3 =(byte)(b1 + b2);
if (b3 > b1)
Console.WriteLine("OK!");
else
Console.WriteLine("wow!");
В этом случае на консоль будет выведено "OK!"
4
16 Что подразумевается под свойствами в C#?
Свойство выступает как двунаправленная связь между полем и методом. Вообще говоря, свойство ведет себя как поле. С помощью свойства
можно получать/заносить данные в поле.
17 Зачем нужны частичные(partial) методы в C#?
Идея в том, чтобы отделить реализацию метода от его объявления. Частичные методы объявляются в каком-то частичном типе, без тела, и
реализуются (не обязательно!) в другом месте. Это дает возможность определить (но не востребовать) дополнительные методы класса.
18 Что такое деструктор в C#?
19 Что такое partial класс и какие его преимущества?
В языке C# возможно разбиение определения класса, структуры или интерфейса между двумя или больше исходными файлами. Каждый
исходный файл содержит свою часть определения класса и все такие части собираются во время компиляции.
Есть несколько ситуаций, когда удачно разбить определение класса на несколько файлов:
1. При работе над большим проектом, разбиение класса на несколько файлов позволяет нескольким программистам работать над ним
одновременно.
2. При работе с автоматически генерируемыми исходниками, код может быть добавлен в класс без необходимости пересоздавать исходник.
Visual Studio использует этот подход при создании компонентов Windows Forms, веб-сервисов и т.д. Возможно создать код, который
использует эти классы без необходимости редактировать файлы, которые создает Visual Studio.
Для такого разбития класса используется модификатор partial.
20 CLR (Common Language Runtime) – определение, примеры задач CLR, состав ядра
CLR (Common Language Runtime) – Среда Времени Выполнения или Виртуальная Машина – управляемая операционная система высокого
уровня, которая обеспечивает выполнение программного кода и предполагает решение следующих задач:
1) управление кодом (загрузку и выполнение),
2) управление памятью при размещении объектов,
3) изоляцию памяти приложений,
4) проверку безопасности кода,
5) преобразование промежуточного языка в машинный код,
6) доступ к метаданным (расширенная информация о типах),
7) обработка исключений, включая межъязыковые исключения,
8) взаимодействие между управляемым и неуправляемым кодом (в том числе и COM-объектами),
9) поддержка сервисов для разработки (профилирование, отладка и т.д.).
CLR – это набор служб, необходимых для выполнения сборки. При этом программный код сборки может быть как управляемым (код, при
выполнении которого CLR, в частности, активизирует систему управления памяти), так и неуправляемым.
CLR состоит из двух компонент: ядра (mscoree.dll) и библиотеки базовых классов (mscorlib.dll). Наличие этих файлов на диске – верный
признак того, что на компьютере, по крайней мере, была предпринята попытка установки платформы .NET.
5
Ядро среды выполнения реализовано в виде библиотеки mscoree.dll. При компоновке сборки в неё встраивается специальная информация,
которая при запуске приложения (EXE) или при загрузке библиотеки (обращение к DLL из неуправляемого модуля – вызов функции LoadLibrary
для загрузки управляемой сборки) приводит к загрузке и инициализации CLR. После загрузки CLR в адресное пространство процесса, ядро
среды выполнения выполняет следующие действия:
1) находит местонахождение сборки,
2) загружает сборку в память,
3) производит анализ содержимого сборки (выявляет классы, структуры, интерфейсы),
4) производит анализ метаданных,
5) обеспечивает компиляцию кода на промежуточном языке (IL) в платформозависимые инструкции (ассемблерный код),
6) выполняет проверки, связанные с обеспечением безопасности,
7) используя основной поток приложения, передаёт управление преобразованному в команды процессора фрагменту кода сборки.
21 Пространство имён – определение, примеры
Пространство имён – это способ организации системы типов в единую группу. Существует общая общеязыковая библиотека базовых классов.
И концепция пространства имён обеспечивает эффективную организацию и навигацию в этой библиотеке. Вне зависимости от языка
программирования доступ к определённым классам обеспечивается за счёт их группировки в рамках общих пространств имён.
Пространство имён Назначение
System
System.Data Для обращения к базам данных
System.Data.Common
System.Data.OleDb
System.Data.SqlClient
System.Collections Классы для работы с контейнерными объектами
System.Diagnostics Классы для трассировки и отладки кода
System.Drawing
Классы графической поддержки
22 Простые типы
Простые типы – это типы, имя и основные свойства которых известны компилятору. Относительно встроенных типов компилятору не
требуется никакой дополнительной информации. Он поддерживает эти типы самостоятельно. К простым типам относятся: целочисленные,
вещественные, decimal, логический.
23 Операции в C# (привести примеры операцийдля логических типов, арифметических и т.д.)
Для каждого определённого в C# типа существует собственный набор операций, определённых на множестве значений этого типа.
Общие характеристики используемых в C# операций представлены ниже.
Категории операций
Арифметические
Логические (boolean и побитовые)
Операции
+-*/%
& | ^ ! ~ && ||
6
Строковые (конкатенаторы)
+
Increment, decrement
++ -Сдвига
>> <<
Сравнения
== != < > <= >=
Присвоения
= += -= *= /= %= &= |= ^= <<= >>=
Member access
.
Индексации
[]
Cast (приведение типа)
()
Conditional (трёхоперандная)
?:
Delegate concatenation and removal
+Создания объекта
new()
Type information
is sizeof typeof
Overflow exception control (управление исключениями) checked unchecked
Indirection and Address (неуправляемый код)
* -> [] &
24 Переменные. Объявление и инициализация
Объявление переменой некоторого типа выполняется следующим образом:
<тип> <имя>;
Эквивалентные формы определения переменных элементарных размерных типов:
int a;
System.Int32 a;
Эквивалентные формы записи операторов определения и инициализации переменных элементарных размерных типов:
int a = 0;
int a = new int();
System.Int32 a = 0;
System.Int32 a = new System.Int32();
CLR не допускает использования в выражениях неинициализированных локальных переменных. В C# к таковым относятся переменные,
объявленные в теле метода. Так что при разработке алгоритма следует обращать на это особое внимание.
25 Объявление константы
Объявляются с дополнительным спецификатором const. Требуют непосредственной инициализации. В данном примере инициализируется
литералом 3.14.
const float Pi = 3.14;
26 Что такое класс в С#?
Классом называется фрагмент кода, которому предшествует зарезервированное сло¬во class. Членами класса могут быть данные (они
называются полями) и под¬программы (они называются методами). По своей сути класс – это тип, то есть образец для создания объектов (так
называются переменные типа класса).
7
27 Что такое наследование?
Наследование (inheritance) - это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может
наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование является важным,
поскольку оно позволяет поддерживать концепцию иерархии классов (hierarchical classification).
28 Что такое полиморфизм?
Полиморфизмом – способность родственных (то есть имеющих общий родительский класс) объектов решать схожие по смыслу проблемы
разными способами. Для этого в каждом классе-потомке следует переопределить нужный родительский метод.
29 Что такое инкапсуляция?
Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий зтими данными, а также защищает и то, и
другое от внешнего вмешательства или неправильного использования.
30 Назначение директив public/private
1) public (общедоступный) – делает члены доступными из любого кода.
2) private (приватный) – делает члены доступными только из того кода, который является частью данного класса (используется по умолчанию,
если не указыва¬ется никакое ключевое слово).
31 Зачем нужны #region и #endregion?
С помощью ключевых слов #region и #endregion обозначается начало и конец раздела кода, который нужно сделать сворачиваемым.
32 Как объявляются структуры в C#?
Структура представляет собой набор блоков данных, возможно, разного типа. Структуры определяются с помощью ключевого слова struct:
struct <имя_типа>
{
<объявления_членов>
}
В разделе <объявления_членов> содержатся объявления переменных (называе-мых данными-членами структуры) в практически том же
самом формате, что и обычно. Объявление каждого члена имеет следующий вид:
<уровень_доступа> <тип> <имя>;
33 Что такое массив? Объявление массива
Массив – это проиндексированный список переменных, хранящихся в единственной переменной типа массива. Массивы имеют один
единственный базовый тип, т.е. все отдельные вхождения в массиве относятся к одному и тому же типу.
Объявляются массивы следующим образом:
<базовый_ТИП> [] <имя>;
34 Что такое foreach?
Цикл foreach позволяет обращаться к каждому элементу в массиве с помощью та-кого простого синтаксиса:
foreach ( <базовый_тип> <имя> in <массив> )
{
8
// можно использовать <имя> для каждого элемента
}
Этот цикл будет осуществлять проход по всем элементам и помещать каждый из них по очереди в переменную <имя> без риска получения
доступа к недопус¬тимым элементам. Такой подход позволяет не беспокоиться о том, сколько элементов содержится в массиве, и быть
уверенным, что каждый из них будет использован в цик¬ле.
35 Определение классов в С#. Ключевые слова internal, public, abstract
В языке С# для определения классов применяется ключевое слово class:
class MyClass
{
// Члены класса.
}
По умолчанию классы объявляются внутренними, что делает их доступными только для кода, который находится внутри текущего проекта.
Объявлять их таковы¬ми можно явно с использованием ключевого слова internal. В качестве альтернативного варианта можно указывать, что
класс является обще-доступным и должен быть также доступен и в коде других проектов. Для этого нужно использовать ключевое слово public.
Можно использовать ключевое слово abstract и тем самым делать класс абстрактным (т.е. не допускающим создания экземпляров,
позволяющим только наследовать от него другие классы и способным иметь абстрактные члены)
36 Наследование классов: синтаксис и общий смысл
Наследование тоже может задаваться в определении класса. Делается это добавле¬нием после имени класса двоеточия со следующим за
ним именем базового класса. public class MyClass : MyBase
{
// Члены класса.
}
В определениях классов разрешено указывать только один базовый класс и в случае наследования от абстрактного класса нужно обязательно
реализовать все наследуемые абстрактные члены (если только производный класс тоже не является абстрактным).
Компилятор не допускает, чтобы производный класс был более доступным, чем его базовый класс. Это означает, что внутренний класс может
наследоваться от обще¬доступного класса, а вот общедоступный класс от внутреннего базового – нет.
37 Определение интерфейсов
Интерфейсы объявляются похожим на классы образом, но только с использовани¬ем не ключевого слова class, а ключевого слова interface:
interface IMylnterface
{
// Члены интерфейса.
}
Ключевые слова public и internal, играющие роль модификаторов доступа, при¬меняются точно таким же образом, и подобно классам
интерфейсы по умолчанию объявляются внутренними.
Ключевые слова abstract и sealed являются недопустимыми, поскольку ни один из этих модификаторов не имеет смысла в контексте
интерфейсов (они не содержат никакой реализации, из-за чего создавать их экземпляры напрямую нельзя, а для того чтобы приносить пользу,
9
они должны обязательно допускать наследование).
38 Привести примеры членов класса System.Object
Метод экземпляра
класса
Описание метода
system.object
Метод используется при сравнении объектных ссылок. Возвращает значение истина, если сравниваемые элементы
Equals()
ссылаются на одну и ту же часть памяти.
GetHashCode()
Метод возвращает целое число, которое идентифицирует объект в памяти.
GetType()
Происходит возвращение объекта system.type, описывающего полностью этот элемент.
Указанный метод производит возврат строкового представления указанного объекта в виде «пространствоИмен.имяТипа»,
ToString()
т.е. возвращает полное (абсолютное) имя объекта. Когда тип не определен в пределах пространства имен, то метод
возвращает только имяТипа.
Вызов данного метода средой .net(дот нет) происходит при удалении объекта из динамической памяти. Защищенный
Finalize()
метод
Метод является защищенным. Возвращает новый объект, являющийся копией указанного объекта. Если в объекте
содержатся ссылки на другие объекты, то происходит копирование ссылки на соответствующие типы (поверхностное
MemberwiseClone()
копирование). Если в объекте содержатся типы, которые характеризуются значениями, то создаются полные копии
занчений.
39 Конструкторы и деструкторы, их назначение
При определении класса в С# определять ассоциируемые с ним конструкторы и де-структоры обычно не обязательно, поскольку, если таковые
не предоставляются, ком¬пилятор добавляет их автоматически во время сборки кода. Однако если требуется, можно предоставлять свои
собственные и с их помощью выполнять, соответственно, инициализацию объектов и очистку после их уничтожения.
Код в деструкторе выполняется на этапе сборки мусора, позволяя освобождать ресурсы. После вызова данного деструктора также
осуществляются и неявные вызовы деструкторов базовых классов, в числе ко¬торых и вызов деструктора Finalize корневого класса
System.Object. Подобный подход позволяет .NET Framework гарантировать их выполнение, поскольку в случае переопределения деструктора
Finalize вызовы деструктором базовых классов нужно было бы выполнять явно, что потенциально опасно.
40 Ключевое слово this
Ключевое слово this ссылается на текущий экземпляр класса, а также используется в качестве модификатора первого параметра метода
расширения.
41 Что такое делегаты и зачем они?
Делегат (delegate) – это тип, который позволяет хранить ссылки на функции. Объявляются делегаты во многом так же, как функции, но только
безо всякого тела функции и с ключевым словом delegate. В объ¬явлении любого делегата указывается возвращаемый тип и список
параметров. После определения делегата можно объявлять переменную с типом этого делегата. Далее эту переменную можно
инициализировать как ссылку на любую функцию, которая имеет точно такой же возвращаемый тип и список параметров, как и у делегата.
10
42
43
44
45
46
После этого функцию можно вызывать с использованием переменной делегата так, будто бы это и есть сама функция.
Наличие переменной, ссылающейся на функцию, также делает возможным вы-полнение и других операций, которые в противном случае были
бы невозможными. Например, это позволяет передавать переменную делегата функции в качестве пара¬метра, после чего делегат может
использоваться для вызова функции, на которую он ссылается, во время выполнения.
Циклы for, while, do
Цикл for выполняется определенное количество раз и обладает собственным счетчиком. Для определения цикла for требуется описанная ниже
информация:
1) начальное значение для инициализации переменной, играющей роль счетчика;
2) условие для продолжения цикла, в котором участвует переменная-счетчик;
3) операция, которая должна выполняться над переменной-счетчиком в конце каждого цикла.
Цикл while очень похожи на циклы do, но имеют одно важное отличие: булев¬ская проверка в них выполняется в начале, а не в конце цикла.
Если после выполнения этой проверки возвращается false, код в цикле вообще не выполняется. Вместо этого поток выполнения переходит
сразу на код, следующий непосредственно за циклом.
Циклы do функционируют следующим образом. Сначала выполняется код, предна-значенный для прогона в цикле, затем производится
булевская проверка, и если в ее результате возвращается true, данный код выполняется снова, и так повторяется до тех пор, пока после
проверки не будет возвращено значение false, после чего цикл завершается.
Прерывание циклов.
1) break – немедленное завершение цикла;
2) continue – немедленное завершение текущей итерации цикла (выполнение продолжается со следующей итерации);
3) goto – позволяет переходить из цикла к выполнению кода с указанной меткой (не рекомендуется использовать, если требуется, чтобы
код был легким для вос¬приятия и понимания);
4) return – выход из цикла и содержащей его функции.
Отношение между объектами. Включения.
1) Включение. Один класс содержит другой. Эти отношения похожи на отноше¬ния наследования, но позволяют классу-контейнеру
управлять доступом к чле¬нам содержащегося внутри него класса и даже выполнять дополнительную об¬работку перед
использованием этих членов.
Отношение включения легко достигается использованием для хранения экземп¬ляра объекта поля-члена. Это поле может быть
общедоступным, в случае чего поль¬зователи объекта-контейнера будут иметь доступ к предоставляемым им методам и свойствам во
многом подобно тому, как это происходит при наследовании. Однако доступа к внутренним деталям класса через производный класс,
который возможен в случае наследования, в таком случае не будет.
Отношение между объектами. Коллекции.
Один класс выступает в роли контейнера для нескольких экземпля¬ров другого класса. Эти отношения напоминают те, что образуются при
созда¬нии массивов объектов, но предусматривают дополнительные функциональные возможности, наподобие индексации, поиска,
изменения размера и т.д.
Перегрузка операций
Перегруженной называется та¬кая операция, для который был специально написан код для выполнения требуемого действия; этот код
11
добавляется в определение одного из классов, для которого она должна выполняться.
47 События
События являются важными вхождениями, в связи с которыми в других частях кода могут выполняться определенные действия, подобные, но
более мощные, чем генерация исключений.
Чтобы добиться такого поведения, потребуется добавить в код обработчик со¬бытий, представляющий собой функцию особого вида, которая
вызывается при воз¬никновении события. Кроме того, потребуется также сконфигурировать этот обра¬ботчик, чтобы он ожидал поступления
именно интересующего события.
48 Ссылочные типы и типы-значения
1) Типы-значения хранят себя и свое содержимое в одном месте в памяти.
2) Ссылочные типы хранят ссылку на другое место в памяти (называемое кучей), в котором уже и непосредственно хранится их содержимое.
Одно из главных отличий между типами-значениями и ссылочными типами со¬стоит в том, что типы-значения всегда содержат значения, в то
время как ссылоч¬ные типы могут быть нулевыми (null), т.е. не содержать вообще никакого значения. Существует, однако, возможность
создавать тип-значение, ведущий себя в этом отно¬шении подобно ссылочному типу (содержать null), путем использования допускающих null
типов, которые являются разновидностью обобщений (generics).
Единственными простыми типами, которые представляют собой ссылочные типы, являются string и object, хотя массивы неявно тоже являются
ссылочными типами. Каждый создаваемый класс будет представлять собой ссылочный тип, поэтому здесь основной акцент будет делаться
именно на них.
Главное отличие между типами-структурами и классами состоит в том, что типы- структуры представляют собой типы-значения.
49 Сокрытие методов базового класса
При наследовании какого-нибудь (не абстрактного) члена базового класса, так же наследуется и его реализации. Если унаследованный член
является виртуальным, тогда его реализацию можно легко переопределить с помощью ключевого слова override. При желании его реализацию
можно сокрыть использовав ключевое сло¬во new для явного указания.
public class MyDerivedClass : MyBaseClass
{
new public void DoSomething ()
{
// Реализация в производном классе,
// скрывающая базовую реализацию.
}
}
50 Найти неправильное(ые) описание(я) двумерного массива
++a) int [][]a;
b) int [,]b;
c) int [3,4]c;
++d) int [][]f=new int [3][];
12
++e) int [][]d=new int [3][4];
f) int [,]c = new int [3,4];
51 Доступность к членам класса только коду внутри класса или внутри его наследников объявляется с использованием слова:
a) static
++b) protected
c) private
d) friend
52 Деструкторы используются для:
a) реализации действий по инициализации экземпляров или класса в целом
++b) определения действий, которые необходимо выполнить до того, как объект будет уничтожен
c) определения характеристик класса в совокупности со способами их задания и получения
d) реализации вычислений или других действий, выполняемых классом или экземпляром хранения неизменяемых значений, связанных с
классом
53 Поиск последнего вхождения значения в массив определяется с помощью элемента класса System.Array:
a) Reverse
b) LastIndexOf
++c) IndexOf
d) CopyTo
e) Copy
f) Rank
g) Length
54 Целое в диапазоне от -32 768 до 32 767 соответствует простому типу:
a) sbyte
b) byte
++c) short
d) ushort
e) int
55 Конструкторы используются для:
++a) реализации действий по инициализации экземпляров или класса в целом
b) определения действий, которые необходимо выполнить до того, как объект будет уничтожен
c) определения характеристик класса в совокупности со способами их задания и получения
d) реализации вычислений или других действий, выполняемых классом или экземпляром хранения неизменяемых значений, связанных с
13
классом
56 Найти неправильное(ые) описание(я) одномерного массива
++a) int[4] a;
b) int[] a;
c) int[] a = new int[4];
d) int[] a = {1, 2, 3, 4};
e) int a[];
f) int[] a = {1, 2, 3, 4, 5};
g) int[] a= new int[4] {1, 2, 3, 4, 5};
h) int[] a= new int[] {1, 2, 3, 4, 5}
57 Функция, не принимающая значения, содержит в описании слово:
a) delete
b) new
++c) void
d) break
e) return
58 Изменение порядка следования элементов массива на обратный определяется с помощью элемента класса System.Array:
++a) Reverse
b) LastIndexOf
c) IndexOf
d) CopyTo
e) Copy
f) Rank
g) Length
59 Класс System.IO.FileStream реализует:
a) чтение простых встроенных типов во внутренней форме представления
b) запись простых встроенных типов во внутренней форме представления
++c) произвольный (прямой) доступ к файлу. представленному как поток байтов
d) чтение из файла текстовой информации
e) запись в файл текстовой информации
60 Класс System.IO.StreamWriter реализует:
a) чтение простых встроенных типов во внутренней форме представления
b) запись простых встроенных типов во внутренней форме представления
c) произвольный (прямой) доступ к файлу. представленному как поток байтов
d) чтение из файла текстовой информации
++e) запись в файл текстовой информации
14
61 Класс System.IO.BinaryWriter реализует:
a) чтение простых встроенных типов во внутренней форме представления
++b) запись простых встроенных типов во внутренней форме представления
c) произвольный (прямой) доступ к файлу. представленному как поток байтов
d) чтение из файла текстовой информации
e) запись в файл текстовой информации
62 Целое в диапазоне от 0 до 255 соответствует типу .NET Framework:
a) System.SByte
++b) System.Byte
c) System.Int16
d) System.UInt16
e) System.Int32
63 Методы используются для:
a) реализации действий по инициализации экземпляров или класса в целом
b) определения действий, которые необходимо выполнить до того, как объект будет уничтожен
c) определения характеристик класса в совокупности со способами их задания и получения
++d) реализации вычислений или других действий, выполняемых классом или экземпляром хранения неизменяемых значений, связанных с
классом
64 Параметрический цикл объявляется с использованием конструкции:
a) while (выражение_условие) {. . .}
b) do {. . .} while (выражение_условие)
++c) for (выражение_1; выражение_условие; выражение_2){. . .}
d) if (выражение_условие) {. . .} else {. . .}
65 Цикл с предусловием объявляется с использованием конструкции:
++a) while (выражение_условие) {. . .}
b) do {. . .} while (выражение_условие)
c) for (выражение_1; выражение_условие; выражение_2){. . .}
d) if (выражение_условие) {. . .} else {. . .}
66 Цикл с постусловием объявляется с использованием конструкции:
a) while (выражение_условие) {. . .}
++b) do {. . .} while (выражение_условие)
c) for (выражение_1; выражение_условие; выражение_2){. . .}
15
d) if (выражение_условие) {. . .} else {. . .}
67 Метод IndexOf класса System.Array осуществляет:
a) количество элементов массива
b) количество размерностей массива
c) копирование заданного диапазона элементов одного массива в другой
d) копирование всех элементов одного одномерного массива в другой
++e) поиск первого вхождения значения в массив
f) поиск последнего вхождения значения в массив
g) изменение порядка следования элементов на обратный
68 Найти метод с параметром-ссылкой
a) public void Method(int a);
++b) public void Method(ref int a);
c) public void Method(out int a);
d) public void Method(params int[] a);
69 Найти метод с параметром-массивом
a) public void Method(int a);
b) public void Method(ref int a);
c) public void Method(out int a);
++d) public void Method(params int[] a);
70 Сигнатура public void Method(out int a); обозначает метод с:
a) параметром-массивом
++b) выходным параметром
c) параметром-ссылкой
d) параметром-значением
16
Download