Результаты прохождения теста C# основы пользователем Vlad Dem

Результат прохождения теста "C# основы" - Не пройден

+96

  • Кто проходил: Vlad Dem
  • Дата прохождения: 18.03.2019
Для чего предназначен метод Finalize?
Ваши ответы
Позволяет объекту выполнить корректную очистку, прежде чем сборщик мусора освободит занимаемую объектом память
Объяснение:

Позволяет объекту выполнить корректную очистку, прежде чем сборщик мусора освободит занимаемую объектом память. Синтаксис метода:

Какими способами правильно инициализировать двумерный массив? (Выберите все верные варианты)
Ваши ответы
int[,] k = new int [2,3]
Объяснение:

int k[][] = new int [2][3], int[][] k = new int [2][3], int k[,] = new int [2,3] - неправильное объявление массива;
int[][] k = new int[2][] - объявление ступенчатого массива, а не инициализация.

Какие из следующих выражений выполняют проверку на равенство или эквивалентность:
Ваши ответы
a.Equals(b)
a == b
Какими способами из перечисленных может быть перегружен метод в C#?
Ваши ответы
другой тип параметров
другое количество параметров
Что напечатает следующий код:
class MyClass 
{ 
   static void Main() 
   { 
       int a = 1, b = 2; 
       Swap(a, b); 
       Console.WriteLine("a=" + a + ", b=" + b); 
       Console.ReadLine(); 
   } 
 
   private static void Swap(int a, int b) 
   { 
       int c = a; 
       a = b; 
       b = c; 
   } 
} 
Ваши ответы
a=1, b=2
Возможно ли иметь/создать статический индексатор в С#?
Ваши ответы
Нет
Что будет выведено на консоль в результате выполнения программы:
class Program 
{         
   static IEnumerable<char> GetLetters()  
   { 
       yield return 'A'; 
       yield break; 
       yield return 'B'; 
       yield return 'C'; 
   } 
 
   static void Main(string[] args)  
   { 
       foreach(char ch in GetLetters())  
       { 
           Console.Write(ch); 
       } 
       Console.ReadLine(); 
   } 
} 
Ваши ответы
A
Объяснение:

Оператор yield break прекращает итерации.
Операторы
yield return 'B' и
yield return 'C'
не будут выполняться никогда.
подробнее здесь:
http://msdn.microsoft.com/ru-ru/library/dscyy5s0.aspx

Какое значение будет выведено на консоль в результате выполнения программы?
struct A { 
       public virtual void foo() { 
           Console.WriteLine("A"); 
       } 
   } 
 
   struct B : A {  
       public virtual override void foo() { 
           Console.WriteLine("B"); 
       } 
   } 
 
   class Program 
   { 
       static void Main(string[] args) { 
           A v = new B(); 
           v.foo(); 
       } 
   } 
Ваши ответы
Программа не компилируется
Объяснение:

Программа не компилируется по двум причинам:
1. Структуры не могут иметь виртуальных методов;
2. Структуры могут быть унаследованы только от интерфейсов.

Что выведет на экран данный код?
class Program 
{ 
   static void Main(string[] args) 
   { 
       Console.WriteLine(Foo("Original string")); 
   } 
 
   public static string Foo(string str) 
   { 
       try 
       { 
           return str; 
       } 
       finally 
       { 
           Console.WriteLine("In finally"); 
           str = "Somewhere in finally"; 
       } 
   } 
} 
Ваши ответы
Original string
Укажите правильный порядок секций catch при обработке различных типов исключений.
Ваши ответы
От общих к специфичным.
Какие изменения нужно сделать в классе, чтобы он компилировался
public class Foo { 
       private int[] a = new int[10]; 
       private Dictionary<string, int> b; 
       private int[] c = new int[100]; 
 
       public int this[int i] {        // 1 
           get { return a[i]; } 
           set { a[i] = value; } 
       } 
 
       public int this[string id] {    // 2 
           get { return b[id]; } 
           set { b[id] = value; } 
       } 
 
       public int this[int i, int j] { // 3 
           get { return c[i*10 + j]; } 
           set { c[i*10 + j] = value; } 
       } 
   } 
Ваши ответы
Убрать определение индексатора 2
Убрать определение индексатора 3
Объяснение:

Индексаторы допускается перегружать по входным параметрам. Также допускается более одного входного параметра.

Какие строки приведут к ошибке компилляции этого кода если он является частью метода?
int k = 1; 
 
switch (k) 
{ 
   case 0:                                 //1 
   case 1:  Console.WriteLine("Case 1");   //2 
   case 2:                                 //3 
   default: Console.WriteLine("Default");  //4 
} 
Ваши ответы
Код успешно скомпиллируется
Объяснение:

2. В C# в конструкции switch не допускается проход (fall through) в следующий раздел без операторов goto case или goto default. В конце каждого раздела требуется наличие оператора break или другой передачи управления (return, throw, continue). Исключением являются пустые разделы (как 1 и 3). 4. Эти правила также относятся и к последнему разделу.

В определении каких методов класса допущены ошибки?
public class Foo  
{ 
   public void M1(int[] p1, int[] p2) { } 
   public void M2(int[] p1, params int[] p2) { }    
   public void M3(params int[] p1, int[] p2) { } 
   public void M4(params int[] p1, params int p2) { } 
} 
Ваши ответы
Ошибок нет, всё определено корректно
Объяснение:

После параметра с ключевым словом params, дополнительные параметры не допускаются. Не допускается использование ключевого слова params в объявлении метода более одного раза http://msdn.microsoft.com/ru-ru/library/w5zay9db(VS.90).aspx

Из за чего код не скомпилируется?:
using Systеm; 
nаmеsрасе Q 
{ 
   сlаss Sample 
   { 
/*1*/    #rеgiоn Cоnstruсtоr 
       рubliс Sample(string sample) 
       { 
       } 
/*2*/    #еndrеgiоn 
 
/*3*/    #rеgiоn Рrореrtiеs 
       рubliс string Nаmе 
       { 
           sеt; 
           gеt; 
       } 
/*4*/    #еndrеgiоn 
 
/*5*/    #rеgiоn Меthоds 
       stаtiс vоid Маin(string[] аrgs) 
       { 
/*6*/            Sample n = nеw Sample("Hеlо Wrоld");     
       } 
/*7*/    #еndrеgiоn 
   } 
} 
Ваши ответы
В этом коде нет ошибок
Объяснение:

#region, #endregion - элементы оформления кода, при этом # должна быть первым непробельным символом на строке. /**/ - Вполне себе комментарии Hello World является строковым выражением, его синтаксис не проверяется=)

Чем отличаются следующие объявления переменной: 1.
double[,] myDoubles; 2.   double[][] myDoubles;