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

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

+105

  • Кто проходил: Denis Orlov
  • Дата прохождения: 14.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";
Объяснение:

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

Можно ли в конструктор передать параметр с ключевым словом ref?
Ваши ответы
Да
Объяснение:

Можно, в этом плане конструктор ничем не отличается от любого другого метода.

Какое значение будет занесено в переменную b
class Program 
{ 
   static void Main(string[] args) 
   { 
       Func<int> d; 
       d = () => 0; 
       d += () => 1; 
       d += () => 2; 
       int b = d(); 
   } 
} 
Ваши ответы
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"; 
       } 
   } 
} 
Ваши ответы
In finally
Original string
Какими способами из перечисленных может быть перегружен метод в C#?
Ваши ответы
другой тип параметров
другое количество параметров
Что будет выведено на консоль в результате выполнения следующего кода:
namespace ConsoleApplication1 
{ 
   class Program 
   { 
       static void Main(string[] args) 
       { 
           string @string = "ABC"; 
           Console.WriteLine(string); 
 
           Console.ReadLine(); 
       } 
   } 
} 
Ваши ответы
Возникнет ошибка компиляции
Объяснение:

В Console.WriteLine мы пытаемся вывести тип, а не локальную переменную, чтобы вывести переменную к ней нужно обратиться @string.

Чем отличаются следующие объявления переменной: 1.
double[,] myDoubles; 2.   double[][] myDoubles; 
Ваши ответы
В первом случае объявляется обыкновенный двумерный массив. Во втором случае объявляется "рваный массив", т.е. массив массивов, где каждая строка массива может иметь свою длину.
Какие изменения нужно сделать в классе, чтобы он компилировался
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; } 
       } 
   } 
Ваши ответы
Ничего убирать не надо, в коде нет ошибок компиляции
Объяснение:

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

Укажите ошибки в коде:
using Systеm; 
nаmеsрасе Q 
{ 
   сlаss Nаmе 
   { 
   #rеgiоn Cоnstruсtоr 
       рubliс Nаmе(string nаmе) 
       { 
           this.Nаmе = nаmе; 
       } 
   #еndrеgiоn 
 
   #rеgiоn Рrореrtiеs 
/*1*/   рubliс string Nаmе 
       { 
           рrivаtе sеt; 
           gеt; 
       } 
   #еndrеgiоn 
 
   #rеgiоn Меthоds 
       stаtiс vоid Маin(string[] аrgs) 
       { 
/*2*/            Nаmе n = nеw Nаmе("Hеlо Wrоld");     
/*3*/            n.Disроsе(); // освобождаем память. 
       } 
   #еndrеgiоn 
   } 
} 
Ваши ответы
Строка /*1*/ Класс Name не может содержать свойство Name
Строка /*3*/ - вызов Dispose для переменной n невозможен.
Объяснение:

/**/ - Вполне себе комментарии
Hello World является строковым выражением, его синтаксис не проверяется=)
Класс не может содержать членов с именем, совпадающим с именем самого класса.
Dispose не объявлен.

Какие действия необходимо и достаточно выполнить для того, чтобы программа компилировалась?
namespace Test 
{ 
   class TypeA 
   { 
       class TypeB:TypeA 
       { 
           public override void MethodA() { Console.WriteLine("TypeB"); } 
       } 
 
       public virtual void MethodA() { Console.WriteLine("TypeA"); } 
   } 
 
   class Prоgrаm  
   { 
       static void Main(string[] args) 
       { 
           TypeA a = new TypeA(); 
           TypeB b = new TypeB(); 
           a.MethodA(); 
           b.MethodA(); 
           Console.ReadLine(); 
       } 
   } 
} 
Ваши ответы
Изменить модификатор доступа класса TypeB на public
Изменить строчку "TypeB b = new TypeB();" на "TypeA.TypeB b = new TypeA.TypeB();"
Скомпилируется ли следующий код (как часть некоторого метода):
ArrayList list = new ArrayList(); 
list.Add(new Object()); 
list.Add(new Exception()); 
list.Add(new Random().Next(10)); 
list.Add(new ArrayList()); 
Ваши ответы
Да
Что напечатает следующий код:
static bool Method1() 
{ 
   Console.WriteLine("in Method1"); 
   return false; 
} 
static bool Method2() 
{ 
   Console.WriteLine("in Method2"); 
   return true; 
} 
static void Main(string[] args) 
{ 
   if (Method1() & Method2()) 
   { 
      Console.WriteLine("inside if"); 
   } 
} 
Ваши ответы
in Method1
in Method2
Объяснение:

Оператор & всегда вычисляет значение обоих операндов

В каких строках содержатся ошибки компиляции
public class Foo  
   { 
       public Action A; 
       public Action B { get; private set; } 
       public event Action C; 
   } 
 
   public static class Program 
   { 
       public static void Main() 
       { 
           Foo foo = new Foo(); 
 
           foo.A += () => { }; // 1 
           foo.A();            // 2 
           foo.B += () => { }; // 3 
           foo.B();            // 4 
           foo.C += () => { }; // 5 
           foo.C();            // 6 
       } 
   } 
Ваши ответы
6
Объяснение:

A - делегат, к нему можно добавлять методы и его можно вызывать;
B - делегат, доступный через свойство с закрытым методом записи. Из другого класса делегат B можно только вызвать, изменить - нельзя;
C - событие. К нему можно добавлять методы. Вызвать событие можно только из класса в котором оно объявлено.
http://msdn.microsoft.com/ru-ru/library/8627sbea(VS.90).aspx

Сколько объектов типа string будет создано во время выполнения следующего кода?
string s = "sdfsg";   if(s.ToLower().Substring(1, 2).EndsWith("exe"));     
Ваши ответы
4
Объяснение:

1. "sdfs"
2. Получим в результате s.ToLower()
3. Получим в результате .Substring()
4. "exe"