Какое из свойств использует виртуальные или перегружаемые элементы
Библиотека среды программирования обычно содержит:
- справочную документацию
- (Правильный ответ) многократно используемые элементы программ
- описания элементов среды программирования
- книги в электронном виде
Через какой пункт главного меню интегрированной среды выполняется сохранение проекта?
- Build
- (Правильный ответ) File
- Tools
- Edit
- Project
Инкапсуляция это:
- объединение данных и функций программы
- использование объекта через его интерфейс
- объединение всех данных программы в один объект
- (Правильный ответ) сокрытие информации
Какое свойство ООП позволяет единообразно обращаться с разными объектами одной иерархии?
- абстрагирование
- (Правильный ответ) полиморфизм
- инкапсуляция
- наследование
Выберите функции среды программирования
- удаление файлов
- дефрагментация диска
- (Правильный ответ) отладка программ
Через какой пункт главного меню интегрированной среды можно подключить к проекту новые элементы?
- (Правильный ответ) Project
- Tools
- Build
- Edit
В состав среды программирования обычно входит:
а. Текстовый редакторб. Трансляторв. Отладчикг. Драйвер принтерад. Антивирус
- (Правильный ответ) только а, б и в
- только а, б и д
- только б и в
- все перечисленное
Внутреннее представление в компьютере одного и того же числа, представленного в целой и вещественной форме:
- (Правильный ответ) различно
- одинаково
Тип константы определяется;
- по ее категории
- по ее описанию
- у констант нет типа
- (Правильный ответ) по ее внешнему виду
Выберите все допустимые в C# константы.
- (Правильный ответ) -1e-1D
- #0.7
- 7.2.e+3
- ‘\Ю’
- (Правильный ответ) «a\a»
Элементарные конструкции (лексемы) языка C# включают в себя:
- (Правильный ответ) идентификаторы
- выражения
- (Правильный ответ) строковые константы
- операторы
Алфавит языка C# включает в себя:
- (Правильный ответ) буквы албанского алфавита
- символы +, -, *, /
- (Правильный ответ) управляющие cимволы
- (Правильный ответ) символы <, ?, ;
Выберите все допустимые в C# константы.
- (Правильный ответ) ‘\’
- 0xFFG0
- (Правильный ответ) ‘b’
- (Правильный ответ) 7.2e3
- (Правильный ответ) 0.008E-123
Элементарные конструкции (лексемы) языка C# включают в себя:
- операторы присваивания
- (Правильный ответ) вещественные константы
- (Правильный ответ) ключевые слова
- комментарии
Выберите все допустимые в C# константы.
- (Правильный ответ) ‘uA818’
- 5,65
- 0x$1
- (Правильный ответ) 36
- (Правильный ответ) «x=xFfn»
Элементарные конструкции (лексемы) языка C# включают в себя:
- выражения
- двоичные числа
- (Правильный ответ) шестнадцатеричные числа
- (Правильный ответ) десятичные числа с фиксированной точкой
Число 256 можно хранить в переменной типа
- bool
- (Правильный ответ) short
- (Правильный ответ) float
- byte
- (Правильный ответ) ushort
Алфавит языка C# включает в себя:
- (Правильный ответ) символ подчеркивания
- (Правильный ответ) цифры от 0 до 9
- лексемы
- (Правильный ответ) латинские и русские буквы
Выберите все допустимые в C# константы.
- (Правильный ответ) 00
- 1.2_e1
- (Правильный ответ) 0x010E
- (Правильный ответ) 259
В переменной типа byte можно хранить число
- (Правильный ответ) 213
- 1213
- (Правильный ответ) 13
- -13
- -213
Выберите правильное утверждение:
- результат операций сравнения целых чисел — целый
- в одном выражении можно использовать операнды типов double и decimal
- результат операции сложения величины типа int c величиной типа short имеет тип double
- (Правильный ответ) в одном выражении можно использовать операнды типов char и long
Чему равно значение выражения (! a && ( b || c)), где a, b и
с — величины типа bool, имеющие значения true, true и false
соответственно?
- true
- 1
- (Правильный ответ) false
Чему равно значение выражения (a || b && a || c), где a, b и
с — величины типа bool, имеющие значения false, true и true соответственно?
- 1
- false
- (Правильный ответ) true
Чему равно значение выражения (a && ! b || c), где a, b и с —
величины типа bool, имеющие значения false, true и true
соответственно?
- (Правильный ответ) true
- false
- 1
Чему равно числовое значение выражения e+Math.Sqrt(e)*10/2*a при
e = 4, a = 3?
- (Правильный ответ) 34
- 51
- 2
Какой тип имеет выражение a — 0.2, где a — переменная типа
int?
- int
- extended
- float
- (Правильный ответ) double
Чему равно значение выражения (! ( a && b || b && c ) ), где a, b и
с — величины типа bool, имеющие значения false, true и true соответственно?
- (Правильный ответ) false
- 1
- true
Какой тип имеет выражение a == b, где a и b — short?
- (Правильный ответ) bool
- float
- long
- short
Чему будет равно значение переменной m после выполнения
фрагмента программы?
<pre>{ int k, m = 1; for (k = 3; k >= 1; k—); ++m;}</pre>
- (Правильный ответ) 2
- 5
- 9
Чему будет равно значение переменной m после выполнения
фрагмента программы?
{ int k = 0; m = 0; while (k < 3) ++k; ++m;}
- (Правильный ответ) 1
- 22
- 16
Чему будет равно значение переменной m после выполнения
фрагмента программы?
int k = 3, m = 0;while (k > 0) —k; ++m;
- 5
- 11
- (Правильный ответ) 1
В условном операторе после ключевого слова else может находиться
- (Правильный ответ) простой или составной оператор
- (Правильный ответ) вложенный условный оператор
- любой оператор, кроме оператора перехода
- произвольное количество операторов
Чему будет равно значение переменной m после выполнения
фрагмента программы?
int k = 3, m = 0;while (k > 0){ —k; ++m;}
- (Правильный ответ) 3
- 2
- 6
Чему будет равно значение переменной a после выполнения фрагмента программы, если b = 0?
a = 1;if (b < 1) a = 2;if (b > 5) a = 3;
- 12
- 5
- 3
- (Правильный ответ) 2
Что будет выведено на экран в результате выполнения фрагмента программы?
for (int i = 0; i < 3; ++i){ switch (i) { case 0 : Console.Write(«»ZERO «»); break; case 1 : Console.Write(«»ONE «»); break; default: Console.Write(«»DEF «»); return; }}</pre>
- (Правильный ответ) ZERO ONE DEF
- ZERO ONE ONE DEF
- ZERO DEF ONE DEF
- ZERO DEF DEF
- ZERO ONE
Чему будет равно значение переменной A после выполнения фрагмента программы, если B = 5?
<pre>if (В <= 4)C = 1;else C = 0;A = C;</pre>
- 23
- 19
- (Правильный ответ) 0
- 41
Какие из следующих утверждений правильные?
- поля класса могут быть описаны с модификатором external
- поля класса могут быть описаны с модификатором virtual
- (Правильный ответ) поля класса могут быть описаны с модификатором static
Какая переменная доступна только в методе, где она объявлена?
- переменная-член
- внешняя переменная
- (Правильный ответ) локальная переменная
- переменная класса
Заголовок метода имеет вид:
<code> public f(char a, ref float b, float c);</code>
Укажите правильные варианты вызова метода, если переменные в
вызывающей функции описаны так:
char a, c; float b, x; int d;
- f(a, ref c, b);
- (Правильный ответ) f(c, ref b, d);
- f(a, ref b, x);
- (Правильный ответ) f(a, ref x, c);
Заголовок метода имеет вид:
public f( float a, ref int b, float c);
Укажите правильные варианты вызова метода, если переменные в
вызывающей функции описаны так:
float a, x; int b, c;
- (Правильный ответ) f(x, ref c, 28);
- f(a, ref x, c);
- f(a, ref 28, x);
- (Правильный ответ) f(a, ref b, c);
Какие спецификаторы можно определить для класса в С#?
- readonly
- (Правильный ответ) protected
- (Правильный ответ) new
- volatile
Какие спецификаторы можно определить для класса в С#?
- void
- (Правильный ответ) public
- extern
- object
При обращении к нестатическому методу перед его именем указывается
- имя сборки
- имя класса
- (Правильный ответ) имя экземпляра объекта
- ничего не указывается
Может ли класс иметь более одного конструктора?
- не может
- (Правильный ответ) может
Параметр метода описан как «ref int a».
При вызове метода аргумент, соответствующий параметру, может быть:
- выражением типа int
- константой, тип которой имеет неявное преобразование к типу int
- (Правильный ответ) инициализированной переменной типа int
- выражением любого целого типа
Параметр метода описан как «ref int a».
При вызове метода аргумент, соответствующий параметру, может быть:
- выражением любого целого типа
- выражением любого типа
- (Правильный ответ) переменной типа int
- выражением, результат которого имеет неявное преобразование к типу int
Какие из следующих утверждений верные?
- если программист не задал ни одного конструктора, выдается синтаксическая ошибка
- (Правильный ответ) конструктор не возвращает значение
- конструкторы наследуются
- конструктор возвращает значение типа void
Какие из следующих утверждений правильные?
- (Правильный ответ) поля класса могут быть описаны с модификатором public
- (Правильный ответ) поля класса могут быть описаны с модификатором new
- поля класса могут быть описаны с модификатором casual
- поля класса могут быть описаны с модификатором abstract
Как реализовать свойство, доступное только для чтения?
- задать для свойства спецификатор доступа protected
- задать для свойства спецификатор доступа sealed
- использовать в объявлении свойства спецификатор доступа readonly
- (Правильный ответ) реализовать только метод get
Даны описания:
class One { int a; public int b; public static int c; }…One x = new One();
Укажите правильные способы обращения к полям:
- One.a
- (Правильный ответ) One.c
- (one)x.a
- x.c
Какие спецификаторы можно определить для класса в С#?
- override
- (Правильный ответ) static
- (Правильный ответ) internal
- (Правильный ответ) private
Что будет выведено на экран в результате выполнения фрагмента программы?
<pre>{char[] a = {‘a’, ‘b’, ‘c’, ‘r’, ‘c’, ‘a’, ‘a’, ‘b’};int k = 0;for (int i = 0; i < 8; i++) if (a[i] > ‘c’) ++k;Console.Write(k);}</pre>
- <3>
- (Правильный ответ) <1>
- <5>
Какое число получится в результате выполнения фрагмента программы?
<pre>{ int[] a = {3, 8, 0, -6, 0, -1, -9, 3}; int i, k; k = a[0]; for (i = 1; i < 8; i++) if (a[i] > k) k = a[i]; Console.WriteLine(k);}</pre>
- 4
- (Правильный ответ) 8
- 6
Какое число получится в результате выполнения фрагмента программы?
<pre>{ int[] a = {3, 8, 0, -6, 0, -1, -9, 3}; int i, k; k = Math.Abs(a[7]); for (i = 0; i< 8; i++) if (Math.Abs(a[i]) > k) k = Math.Abs(a[i]); Console.WriteLine(k);}</pre>
- (Правильный ответ) 9
- 15
- 1
Какая величина вычисляется во фрагменте программы?
<pre>{ int[] a = {3, 8, 0, -6, 0, -1, -9, 3}; int k = 0; for (int i = 7; i>= 0; —i) if (a[i] < 0) k += i; Console.WriteLine(k);}</pre>
- сумма отрицательных элементов массива
- количество номеров отрицательных элементов массива
- (Правильный ответ) сумма номеров отрицательных элементов массива
- количество отрицательных элементов массива
Что будет выведено на экран в результате выполнения фрагмента программы?
<pre>{char[] a = {‘a’, ‘b’, ‘c’, ‘r’, ‘c’, ‘a’, ‘a’, ‘b’};char k = ‘b’;for (int i = 0; i < 8; i++) if (a[i] < k) k = a[i];Console.Write(k);}</pre>
- (Правильный ответ) <a>
- <c>
- <r>
Какая величина вычисляется во фрагменте программы?
{ int[] a = {3, 8, 0, -6, 0, -1, -9, 3}; int k = 0, j = 4; for (int i = 0; i < 8; i++) if (a[i] > j) k = Math.Abs(a[i]); Console.WriteLine(k);}
- (Правильный ответ) модуль последнего из элементов массива, больших, чем 4
- первый из элементов массива, больший, чем 4
- модуль первого из элементов массива, больших, чем 4
- первый из элементов массива, больших по модулю, чем 4
Что будет выведено на экран в результате выполнения фрагмента программы?
<pre>{char[] a = {‘a’, ‘b’, ‘c’, ‘r’, ‘c’, ‘a’, ‘a’, ‘b’};char k = ‘a’;for (int i = 0; i < 8; i++) if (a[i] > k) { k = a[i]; Console.Write(k); }}</pre>
- <bab>
- (Правильный ответ) <bcr>
- <bab>
Какая величина вычисляется во фрагменте программы?
{ int[,] a = new int[3,4] {{0,-1,2,3},{-2,-3,2,2},{0,0,0,6}}; int j, k; for (int i = 3; i >= 0; —i) { k = 0; for (j = 0; j < 4; j++) if (a[i,j] > 0) ++k; } Console.WriteLine(k);}
- количество положительных элементов массива в последнем столбце
- количество положительных элементов массива в последней строке
- количество положительных элементов массива в каждой строке
- количество положительных элементов массива
- (Правильный ответ) количество положительных элементов массива в первой строке
Выберите правильные утверждения
- (Правильный ответ) абстрактный класс задает интерфейс для всей иерархии своих потомков
- абстрактный класс нельзя использовать при задании типа параметров методов
- класс, с котором есть хотя бы один обычный метод, не является абстрактным
- допускается создание экземпляра абстрактного класса
Какое из следующих утверждений истинно?
- перегруженные методы должны отличаться типом параметров
- (Правильный ответ) перегруженные методы должны отличаться числом и/или типом параметров
- перегруженные методы должны отличаться типом возвращаемого значения
- перегруженные методы должны отличаться именами параметров
Если класс, производный от абстрактного, не определяет все его абстрактные методы, он является:
- закрытым
- открытым
- (Правильный ответ) абстрактным
- виртуальным
Какой из приведенных ниже методов реализует перегрузку унарной операции ++?
- public operator++ Mhz (Mhz mhz) {…}
- (Правильный ответ) public static Mhz operator++ (Mhz mhz) {…}
- public static Mhz ++operator (Mhz mhz) {…}
- public Mhz operator++ (Mhz mhz) {…}
Какая из следующих операций при перегрузке в классе не может иметь возвращаемое значение булевского типа?
- !=
- <
- ==
- (Правильный ответ) —
Выберите правильные утверждения
- при перегрузке операции можно задать ее приоритет
- (Правильный ответ) все операции класса должны определяться как public static
- при перегрузке бинарных операций второй операнд должен иметь тип класса, для которого определяется операция
- параметры в операцию передавать запрещается
Выберите правильные утверждения :
- (Правильный ответ) для стандартных типов данных переопределять операции нельзя
- параметры в операцию должны передаваться только по ссылке
- (Правильный ответ) операции класса должны определяться как static
- операции могут иметь аргументы по умолчанию
Может ли конструктор быть виртуальным?
- да
- (Правильный ответ) нет
Что выведет на консоль приведенная программа?
namespace ConsoleApplication1{ class A{ public void WriteMessage(){ Console.Write(«»A.Write «»);} } class B: A{ public new void WriteMessage(){ Console.Write(«»B.Write «»);} } class C: B{ public new void WriteMessage(){ Console.Write(«»C.Write «»);} } class Program{ static void Main(string[] args){ A x = new B(); x.WriteMessage(); x = new C(); x.WriteMessage();}}}
- A.Write B.Write
- A.Write C.Write
- B.Write B.Write
- (Правильный ответ) A.Write A.Write
Можно ли использовать в теле конструктора виртуальные методы?
- (Правильный ответ) да
- нет
Можно ли при переопределении виртуального метода в потомке изменить количество его аргументов?
- можно в любом случае
- (Правильный ответ) да, если используется ключевое слово new
- (Правильный ответ) нет, если используется ключевое слово override
Что выведет на консоль приведенная программа?
namespace ConsoleApplication1{ class A{ public virtual void WriteMessage(){ Console.Write(«»A.Write «»);} } class B: A{ public override void WriteMessage(){ Console.Write(«»B.Write «»);} } class C: B{ public new void WriteMessage(){ Console.Write(«»C.Write «»);} } class Program{ static void Main(string[] args){ A x = new B(); x.WriteMessage(); x = new C(); x.WriteMessage();}}}
- B.Write C.Write
- A.Write A.Write
- (Правильный ответ) B.Write B.Write
- A.Write B.Write
Что выведет на консоль приведенная программа?
namespace ConsoleApplication1{ class A{ public virtual void WriteMessage(){ Console.Write(«»A.Write «»);} } class B: A{ public override void WriteMessage(){ Console.Write(«»B.Write «»);} } class C: B{ public override void WriteMessage(){ Console.Write(«»C.Write «»);} } class Program{ static void Main(string[] args){ A x = new B(); x.WriteMessage(); x = new C(); x.WriteMessage();}}}
- B.Write B.Write
- A.Write C.Write
- A.Write A.Write
- (Правильный ответ) B.Write C.Write
Одна таблица виртуальных методов строится для каждого
- экземпляра объекта
- (Правильный ответ) класса
- метода объекта
Методы, которые в разных объектах иерархии выполняют одно и то же по смыслу действие разными способами, следует объявлять как
- обычные
- статические
- (Правильный ответ) виртуальные
Если метод будет выполнять в потомках объекта одни и те же функции, его
следует описать как
- (Правильный ответ) обычный
- виртуальный
Стек реализует дисциплину обслуживания
- LILO
- FILO
- (Правильный ответ) LIFO
- FIFO
Выберите операции, которые не допустимы для очереди:
- (Правильный ответ) добавление элемента в начало очереди
- добавление элемента в конец очереди
- удаление элемента из начала очереди
- (Правильный ответ) корректировка элементов очереди
Какой из приведенных интерфейсов должен реализовывать тип для поддержки глубокого клонирования объектов?
- IComparable
- IMemberwiseClone
- (Правильный ответ) ICloneable
- IClone
Какие элементы может содержать интерфейс?
- деструкторы
- (Правильный ответ) события
- поля
- (Правильный ответ) шаблоны индексаторов
Очередь реализует дисциплину обслуживания
- LIFO
- LILO
- FILO
- (Правильный ответ) FIFO
Какие элементы может содержать интерфейс?
- конструкторы
- (Правильный ответ) абстрактные методы
- поля
- деструкторы
Какой из приведенных интерфейсов реализует класс Array для поддержки цикла foreach?
- IIterator
- (Правильный ответ) IEnumerator
- IComparable
- IForeach
Какие элементы может содержать интерфейс?
- операции
- статические методы
- (Правильный ответ) события
- поля
Какой из приведенных интерфейсов должен реализовывать класс для обеспечения возможности сортировки объектов по различным критериям?
- ISorting
- (Правильный ответ) IComparer
- IEnumerable
- ICompare
Выберите все правильные утверждения:
- (Правильный ответ) при чтении элемент удаляется из очереди
- двунаправленный список реализует дисциплину обслуживания LIFO
- в стеке допустим произвольный доступ к элементу
- (Правильный ответ) очередь реализует дисциплину обслуживания FIFO
Какие элементы может содержать интерфейс?
- операции
- статические методы
- константы
- (Правильный ответ) шаблоны свойств
Какие элементы может содержать интерфейс?
- поля
- конструкторы
- (Правильный ответ) шаблоны свойств
- (Правильный ответ) шаблоны индексаторов
Выберите все правильные утверждения.
- (Правильный ответ) динамическая структура данных может изменять свои размеры во время выполнения программы
- (Правильный ответ) абстрактные структуры данных можно реализовывать различными способами
- стек служит для хранения данных, порядок обращения к которым не важен
- в линейном списке каждый элемент непосредственно связан со всеми остальными
Какие элементы может содержать интерфейс?
- операции
- (Правильный ответ) шаблоны свойств
- статические методы
- (Правильный ответ) абстрактные методы
Дан фрагмент кода:
public class Run { public void DoStuff() { // что-то сделать } public void DoAsync(int a) { Thread myThread; (КОД) myThread = new Thread(myStart); // сделать то, что требуется }} }
Последнее обновление: 03.10.2019
При наследовании нередко возникает необходимость изменить в классе-наследнике функционал метода, который был унаследован
от базового класса. В этом случае класс-наследник может переопределять методы и свойства базового класса.
Те методы и свойства, которые мы хотим сделать доступными для переопределения, в базовом классе помечается модификатором virtual.
Такие методы и свойства называют виртуальными.
А чтобы переопределить метод в классе-наследнике, этот метод определяется с модификатором override.
Переопределенный метод в классе-наследнике должен иметь тот же набор параметров, что и виртуальный метод в базовом классе.
Например, рассмотрим следующие классы:
class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public virtual void Display()
{
Console.WriteLine(Name);
}
}
class Employee : Person
{
public string Company { get; set; }
public Employee(string name, string company) : base(name)
{
Company = company;
}
}
Здесь класс Person представляет человека. Класс Employee наследуется от Person и представляет сотруднника предприятия. Этот класс кроме
унаследованного свойства Name имеет еще одно свойство — Company.
Чтобы сделать метод Display доступным для переопределения, этот метод определен с модификатором virtual. Поэтому мы можем переопределить этот метод, но можем и не переопределять.
Допустим, нас устраивает реализация метода из базового класса. В этом случае объекты Employee будут использовать реализацию метода Display из класса Person:
static void Main(string[] args)
{
Person p1 = new Person(«Bill»);
p1.Display(); // вызов метода Display из класса Person
Employee p2 = new Employee(«Tom», «Microsoft»);
p2.Display(); // вызов метода Display из класса Person
Console.ReadKey();
}
Консольный вывод:
Но также можем переопределить виртуальный метод. Для этого в классе-наследнике определяется метод с модификатором override,
который имеет то же самое имя и набор параметров:
class Employee : Person
{
public string Company { get; set; }
public Employee(string name, string company)
: base(name)
{
Company = company;
}
public override void Display()
{
Console.WriteLine($»{Name} работает в {Company}»);
}
}
Возьмем те же самые объекты:
static void Main(string[] args)
{
Person p1 = new Person(«Bill»);
p1.Display(); // вызов метода Display из класса Person
Employee p2 = new Employee(«Tom», «Microsoft»);
p2.Display(); // вызов метода Display из класса Employee
Console.ReadKey();
}
Консольный вывод:
Bill
Tom работает в Microsoft
Виртуальные методы базового класса определяют интерфейс всей иерархии, то есть в любом производном классе, который не является прямым наследником от
базового класса, можно переопределить виртуальные методы. Например, мы можем определить класс Manager, который будет производным от Employee, и в нем также переопределить
метод Display.
При переопределении виртуальных методов следует учитывать ряд ограничений:
Виртуальный и переопределенный методы должны иметь один и тот же модификатор доступа. То есть если виртуальный метод определен с помощью модификатора
public, то и переопредленный метод также должен иметь модификатор public.Нельзя переопределить или объявить виртуальным статический метод.
Переопределение свойств
Также как и методы, можно переопределять свойства:
class Credit
{
public virtual decimal Sum { get; set; }
}
class LongCredit : Credit
{
private decimal sum;
public override decimal Sum
{
get
{
return sum;
}
set
{
if(value > 1000)
{
sum = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
LongCredit credit = new LongCredit { Sum = 6000 };
credit.Sum = 490;
Console.WriteLine(credit.Sum);
Console.ReadKey();
}
}
Ключевое слово base
Кроме конструкторов, мы можем обратиться с помощью ключевого слова base к другим членам базового класса.
В нашем случае вызов base.Display(); будет обращением к методу Display() в классе Person:
class Employee : Person
{
public string Company { get; set; }
public Employee(string name, string company)
:base(name)
{
Company = company;
}
public override void Display()
{
base.Display();
Console.WriteLine($»работает в {Company}»);
}
}
Запрет переопределения методов
Также можно запретить переопределение методов и свойств. В этом случае их надо объявлять с модификатором sealed:
class Employee : Person
{
public string Company { get; set; }
public Employee(string name, string company)
: base(name)
{
Company = company;
}
public override sealed void Display()
{
Console.WriteLine($»{Name} работает в {Company}»);
}
}
При создании методов с модификатором sealed надо учитывать, что sealed применяется в паре с override, то есть только в переопределяемых методах.
И в этом случае мы не сможем переопределить метод Display в классе, унаследованном от Employee.