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

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

+106

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

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

Для инкапсуляции вы хотите определить автосвойство так, чтобы невозможно было вызвать сеттер за пределами класса, но геттер оставить доступным. В каком из заданных вариантов описано нужное свойство?
Ваши ответы
public int Value { get; private set; }
Укажите, какие свойства определены неверно?
public class Foo { 
       private int a; 
       private int c; 
 
       public int A {    
           get { return a; }  
           set { a = value; } 
       } 
 
       public int B { 
           get { return 0; } 
       } 
 
       public int C { 
           set { c = value; } 
       } 
 
       protected int D { get; set; } 
 
       protected int E { get; private set; } 
 
       protected int F { public get; set; } 
   } 
Ваши ответы
F
Объяснение:

А - свойство с явно определенными методами доступа.
В и C - свойства с методами доступа только для чтения и только для записи, соответственно.
D - автоматически реализуемое свойство
E - то же, но с асимметричными методами доступа
F - свойство определено неверно, так как видимость метода доступа(public) не может быть больше видимости свойства (protected)
Подробности:
http://msdn.microsoft.com/ru-ru/library/x9fsa0sw(VS.90).aspx

Как могут инициализироваться readonly поля экземпляра класса?
Ваши ответы
в конструкторе
при объявлении
В каком примере правильно объявлен расширяющий метод?
Ваши ответы
using System;
public static class stringExtension
{
    public static string Reverse(this string s)
    {
        char[] msv = s.ToCharArray();
        Array.Reverse(msv);
        return new string(msv);
    }
}
Что произойдет в результате выполнения следующего кода:
class Test  
{ 
   static void Main(string[] args)  
   { 
       char[] vowels = {'a','e','i','o','u'}; 
       for (int i = 1; i <= vowels.Length; i++) 
       Console.Write(vowels[i] + " "); 
   } 
} 
Ваши ответы
Код напечатает "e i o u", а дальше уже возникает ошибка времени выполнения
Объяснение:

Нумерация элементов массива начинается с 0. Для обхода всех символов массива необходимо организовать цикл таким образом:

Какие модификаторы доступа из перечисленных по умолчанию даются классу, описанному в namespace?
Ваши ответы
internal
Объяснение:

Невложенный класс - класс, который находится непосредственно в namespace. Такой класс может иметь 2 модификатора доступа - public и internal. По умолчанию класс имеет модификатор internal.

Возможно ли иметь/создать статический индексатор в С#?
Ваши ответы
Нет
Чем отличаются следующие объявления переменной: 1.
double[,] myDoubles; 2.   double[][] myDoubles; 
Ваши ответы
В первом случае объявляется обыкновенный двумерный массив. Во втором случае объявляется "рваный массив", т.е. массив массивов, где каждая строка массива может иметь свою длину.
Скомпилируется ли следующий код (как часть некоторого метода):
string[] str = new string[5]; 
try 
{ 
   str[4] = "anything"; 
} 
catch (Exception e) 
{ 
   Console.WriteLine(e.Message); 
} 
catch (IndexOutOfRangeException e) 
{ 
   Console.WriteLine(e.Message); 
} 
Ваши ответы
Нет
Объяснение:

Код не компилируется.
Обработка исключений должна идти в восходящем порядке по иерархии исключений (от классов-детей к суперклассам).

Что напечатает данный код:
class Test { 
  static void increment(int p) 
  { 
    ++p; 
  } 
  static void Main( )  
  { 
    int x = 8; 
    increment(x); 
    Console.WriteLine(x++); 
  } 
} 
Ваши ответы
8
Объяснение:

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

Скомпилируется ли следующий код?
public class CustomConvertor 
{ 
   public static string ToDate(out this DateTime dt)      
   { 
       return dt.ToShortDateString();  
   } 
} 
Ваши ответы
Нет
Объяснение:

Не будет работать.
1. Класс содержащий
расширяющие методы должен быть статическим.
2. Модификатор "out" в объявлении расширяющего метода - не нужен.

Что выведет данный код?
abstract class A 
{         
   public virtual void Method1() 
   { 
       Console.WriteLine("A.Method1"); 
   } 
 
   public abstract void Method2(); 
} 
 
class B:A 
{ 
   public override void Method1() 
   { 
       Console.WriteLine("B.Method1"); 
   } 
} 
class Program 
{ 
   public static void Main(string[] args) 
   { 
       A a = new B(); 
       a.Method1(); 
   } 
} 
Ваши ответы
Код не скомпилируется
Объяснение:

класс B должен реализовать Method2()

Что выведет на консоль следующая программа:
using System; 
 
namespace TestCS { 
   class Program { 
       public delegate void MethodDelegate(string param); 
 
       private void privateMethod(string str) { 
           Console.Write(str); 
       } 
 
       public void GetMeth(out MethodDelegate md) { 
           md = privateMethod; 
       } 
 
       static void Main(string[] args) { 
           MethodDelegate myMethod; 
           Program program = new Program(); 
           program.GetMeth(out myMethod); 
           myMethod("Hello"); 
           Console.Write("_world"); 
           Console.ReadKey(); 
       } 
   } 
} 
Ваши ответы
Hello_world
Какие из строк вызовут ошибку компиляции?
1)Type t1 = typeof(System.Int32); 
2)Type t2 = Type.GetType("System.Int32"); 
3)Type t3 = Type.GetType(System.Int32); 
4)Type t4 = System.Int32.GetType(); 
Ваши ответы
3
4
Объяснение:

У Type есть метод GetType, который принимает в качестве параметра String. А у каждого типа из CLR есть метод GetType, но уже без параметров.