C# C#  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Средний  · 

Методы и передача параметров

Посвящён вызову методов: выбору перегрузки, передаче по значению и по ссылке, params и именованным аргументам. Особое внимание — случаям, где видимый синтаксис похож, а влияние на переменную вызывающего кода различается.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 20
Какая перегрузка будет вызвана?
C#
static void Print(int x) => Console.Write("int");
static void Print(long x) => Console.Write("long");
static void Print(object x) => Console.Write("object");
Print(1);
Вопрос 2 из 20
Почему вызов M(null) может быть неоднозначным?
C#
static void M(string x) { }
static void M(StringBuilder x) { }
M(null);
Вопрос 3 из 20
Какой текст будет выведен?
C#
class Base { }
class Derived : Base { }
static void Show(Base x) => Console.Write("base");
static void Show(Derived x) => Console.Write("derived");
Base b = new Derived();
Show(b);
Вопрос 4 из 20
Как сделать намерение вызова перегрузки явным при null?
Вопрос 5 из 20
Почему чрезмерное число близких перегрузок ухудшает API?
Вопрос 6 из 20
Как изменится n после последовательных операций через ref-параметр?
C#
static void Change(ref int x)
{
    x++;
    x *= 2;
}
int n = 5;
Change(ref n);
Console.WriteLine(n);
Вопрос 7 из 20
Как заменить ссылку caller на новый объект внутри метода?
C#
static void Replace(ref StringBuilder value)
{
    value = new StringBuilder("new");
}
Вопрос 8 из 20
Чем out отличается от ref для вызывающей стороны?
Вопрос 9 из 20
Почему этот метод не компилируется?
C#
static bool TryRead(string s, out int result)
{
    if (s == "one") { result = 1; return true; }
    return false;
}
Вопрос 10 из 20
Когда in-параметр особенно уместен?
Вопрос 11 из 20
Что получит метод Sum?
C#
static int Sum(params int[] values) => values.Sum();
Console.WriteLine(Sum(1, 2, 3));
Вопрос 12 из 20
Какая перегрузка выберется для Pick(5)?
C#
static string Pick(int x) => "single";
static string Pick(params int[] x) => "many";
Console.WriteLine(Pick(5));
Вопрос 13 из 20
Как передать в params уже созданный int[] без упаковки массива в ещё один массив?
Вопрос 14 из 20
Какой риск есть у частого вызова метода params в горячем цикле?
C#
for (int i = 0; i < 1_000_000; i++)
    Log(i, i + 1, i + 2); // Log(params object[] values)
Вопрос 15 из 20
Какой вызов передаст пустой массив?
Вопрос 16 из 20
Какую площадь вернёт вызов с именованными аргументами height: 2 и width: 4?
C#
static int Area(int width, int height) => width * height;
Console.WriteLine(Area(height: 2, width: 4));
Вопрос 17 из 20
Зачем именовать bool-аргумент?
Вопрос 18 из 20
Что произойдёт после переименования публичного параметра timeout в delay?
Вопрос 19 из 20
Какие значения получит метод?
C#
static void M(int a, int b = 2, int c = 3) =>
    Console.WriteLine($"{a},{b},{c}");
M(1, c: 9);
Вопрос 20 из 20
Как проектировать публичный метод, чтобы не злоупотреблять длинной цепочкой именованных optional-параметров?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу