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

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

+93

  • Кто проходил: Denis Orlov
  • Дата прохождения: 12.08.2019
Что будет выведено на консоль в результате выполнения кода?
public static void Foo(params string[] lines)  
       { 
           foreach (string l in lines) { 
               Console.Write(l); 
           } 
       } 
 
       public static void Main() 
       { 
           string[] data = new string[] { "1", "2", "3" }; 
           Foo(data); 
           Foo("A", "B", "C"); 
       } 
Ваши ответы
123ABC
Объяснение:

Foo - метод, принимающий произвольное количество строк в качестве параметров. Также не запрещено передавать в метод готовый массив строк

Укажите корректные примеры использования ключевого слова var для автоматического вывода типов:
Ваши ответы
var evenNumbers = new int [] {2, 4, 6, 8};
var myINt = 1;
var myString = "Goodbye word";
Объяснение:

Смотрим по правой части где явно можно вывести тип

Для инкапсуляции вы хотите определить автосвойство так, чтобы невозможно было вызвать сеттер за пределами класса, но геттер оставить доступным. В каком из заданных вариантов описано нужное свойство?
Ваши ответы
public int Value { get; private set; }
Какими способами правильно инициализировать двумерный массив? (Выберите все верные варианты)
Ваши ответы
int[,] k = new int [2,3]
int[,] k = {{2,-2},{3,-22},{0,4}}
Объяснение:

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

Какие из перечисленных ключевых слов используются в конструкции "если":
Ваши ответы
if
Как могут инициализироваться readonly поля экземпляра класса?
Ваши ответы
в конструкторе
при объявлении
Какие из следующих модификаторов валидны в C#?
Ваши ответы
public
protected internal
private
internal
Какой будет результат компиляции и выполнения данного кода:
public static void Main(string[] args) 
{ 
   int k = 1;  
   Console.WriteLine(k++ + ++k); 
} 
Ваши ответы
4
Объяснение:

(k++ + ++k) :
1) k++=1 - результат выражения, но после k++ увеличивает значение k на 1, т.е. k=2. Таким образом имеем (1 + ++k), где k=2.
2) (1 + (2+1))=4

C# является регистрозависимым языком.
Ваши ответы
Да
Где, по мнению CLR, расположено начало исключения
class Program  
{ 
   static void Main(string[] args)  
   { 
       try  
       { 
           int value = int.Parse("test exception"); 
       }  
       catch (Exception e)  
       { 
           throw e; // Здесь ли, по мнению CLR, расположено начало исключения? 
       } 
   } 
} 
Ваши ответы
Да
Объяснение:

В случае использования конструкции "throw e;" (с явным указанием объекта исключения) считается, что ошибка будет обработана, поэтому создается новый объект и вся информация о причине возникновения исключения (StackTrace) теряется.
При повторной генерации исключения с помощью "throw;" начальная точка в стеке не сбрасывается, поэтому CLR считает, что исключение возникло выше по стеку.

Скомпилируется ли следующий код (как часть некоторого метода):
ArrayList list = new ArrayList(); 
list.Add(new Object()); 
list.Add(new Exception()); 
list.Add(new Random().Next(10)); 
list.Add(new ArrayList()); 
Ваши ответы
Да
Скомпилируется ли данный код?
internal sealed class SomeGenericClass<T>  
{ 
   public static T SomeMethod()  
   { 
       return new T(); 
   } 
} 
Ваши ответы
нет
Объяснение:

Не скомпилируется, т.к не указано ограничение (происходит вызов открытого конструктора без параметров, но не у всех ссылочных типов он есть). Для того, чтобы код скомпилировался необходимо добавить ограничение, например:

Будет ли компилироваться данный фрагмент кода?
try  
{ 
   FileStream F = new FileStream("myfile.txt"); 
   string s = F.ReadLine(); 
}  
catch (IOException) { } 
finally  
{ 
   F.Close(); 
} 
Ваши ответы
Нет
Объяснение:

Компилятор ругнется на то, что переменная F не определена в месте вызова F.Close()

В каких строках содержатся ошибки компиляции?
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

Каков будет результат при выполнении следующего кода:
public abstract class A 
{ 
   public virtual string Print() { return "A"; } 
} 
 
public class B : A 
{ 
   public override string Print() { return "B"; } 
} 
 
public class C : B 
{ 
   public new string Print() { return "C"; } 
} 
A ac = new C(); 
Console.WriteLine(ac.Print()); 
Ваши ответы
C