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

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

+77

  • Кто проходил: Denis Orlov
  • Дата прохождения: 13.08.2019
Какое значение будет занесено в переменную b
class Program 
{ 
   static void Main(string[] args) 
   { 
       Func<int> d; 
       d = () => 0; 
       d += () => 1; 
       d += () => 2; 
       int b = d(); 
   } 
} 
Ваши ответы
2
Объяснение:

Делегат возвращает значение, полученное при вызове последнего метода

Укажите все корректные способы объявления массива в C#.
Ваши ответы
int[] x;
int[][] x;
Как могут инициализироваться readonly поля экземпляра класса?
Ваши ответы
в конструкторе
при объявлении
Что будет выведено на консоль в результате выполнения программы
class Program 
{         
   static IEnumerable<char> GetLetters()  
   { 
       yield return 'A'; 
       yield return 'B'; 
       yield return 'C'; 
   } 
 
   static void Main(string[] args)  
   { 
       foreach(char ch in GetLetters())  
           { 
               Console.Write(ch); 
           } 
   } 
} 
Ваши ответы
ABC
Объяснение:

Функция GetLetters() создает перечисление по объектам типа char.
Оператор yield return показывает компилятору, какое значение возвращает итератор на текущей итерации. На следующей итерации выполнение продолжается со следующего оператора.
Подробнее здесь: http://msdn.microsoft.com/ru-ru/library/dscyy5s0.aspx

Выберите безошибочный код:
Ваши ответы
double i; int j; short k; 
i = j = k = 0; 
ushort u = 10; 
ushort s = ++u; 
Объяснение:

Допустимо использование "цепочки присваиваний" и преобразование типов в операциях присваивания при совместимых типах данных.
В выражениях значения типов sbyte и char преобразуются в int.
Если один из операндов имеет тип double, то результат выражения тоже будет double.

Укажите все правильные способы объявления массива в результате которых массив будет корректно инициализирован
Ваши ответы
int[] someArray = new int[] {1,2,3,4};
int[] someArray = new int[4];
int[] someArray = new int[4] {1,2,3,4};
int[] someArray = {1,2,3,4};
Выберите верные утверждения на счет наследования в C#
Ваши ответы
Класс может наследовать только одну реализацию
Класс может наследовать сколько угодно интерфейсов
Чем отличаются следующие объявления переменной: 1.
double[,] myDoubles; 2.   double[][] myDoubles; 
Ваши ответы
В первом случае объявляется обыкновенный двумерный массив. Во втором случае объявляется "рваный массив", т.е. массив массивов, где каждая строка массива может иметь свою длину.
Что напечатает данный код:
class Test { 
  static void increment(int p) 
  { 
    ++p; 
  } 
  static void Main( )  
  { 
    int x = 8; 
    increment(x); 
    Console.WriteLine(x++); 
  } 
} 
Ваши ответы
8
Объяснение:

Параметр x передается в метод по значению. Сначала произойдет вывод значения, а потом инкремент, так как в данном случае используется постфиксный оператор

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

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

В каких строках содержатся ошибки компиляции?
public class Foo  
   { 
       private double field; 
 
       public double A  
       { 
           get { return field + 10.0; }        // 1 
           set { field = value - 10.0; }       // 2 
       } 
       public int B { get; private set; }      // 3 
   } 
 
   public static class Program 
   { 
       public static void Main() 
       { 
           Foo f = new Foo(); 
 
           double a = f.A;     // 4 
           int b = f.B;        // 5 
           f.B = 10;           // 6 
       } 
   } 
Ваши ответы
6
Объяснение:

А - свойство с методами доступа для чтения и для записи.
B - автоматически реализуемое свойство с асимметричными методами доступа. Для записи свойство доступно только членам класса
Подробности здесь:
http://msdn.microsoft.com/ru-ru/library/x9fsa0sw(VS.90).aspx

Что напечатает следующий код:
static void Main(string[] args) { 
  int a = 0; 
  decimal b = 0; 
  double c = 0.0; 
 
  Console.WriteLine(a == b); 
  Console.WriteLine(a.Equals(b)); 
  Console.WriteLine(a == c); 
  Console.WriteLine(a.Equals(c)); 
  Console.ReadLine(); 
} 
Ваши ответы
True
False
True
False
Каким будет результат выполнения кода:
using System; 
 
class App 
{  
   static void Main() 
   { 
       string s; 
       s+="string"; 
       Console.WriteLine(s); 
   } 
} 
Ваши ответы
string
Объяснение:

Переменная s не инициализированная. Если бы код выглядел вот так

Какое значение будет выведено на консоль в результате выполнения программы?
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(); 
       } 
   } 
Ваши ответы
B
Объяснение:

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