С#. Вопросы и ответы к собеседованию. Часть 2

Источник

Вопрос 5

Что выведет на консоль следующий код

Варианты ответов:

  1. true, false, true, true
  2. true, true, true, true
  3. true, false, true, false
  4. true, false, false, false

Ответ

Тут надо добавить еще что код var s2 = “abc” + “cba”; компилятор оптимизирует и превратит на этапе компиляции в var s2 = “abccba”;

если две строки имеют одинаковый набор символов и создаются во время
компиляции, то они фактически указывают на один и тот же объект.

Вопрос 6

Какие результаты выведет следующий код

Варианты ответов:

  1. Выбросит исключение
  2. Напечатает слово “test”
  3. Произойдет взаимоблокировка (deadlock)
  4. Напечатает слово “test” бесконечное число раз

Ответ

Выведет слово test

Два lock’а не приведут к взаимоблокировке в данном случае, поскольку дело происходит в одном и том же потоке.

Вопрос 7

Есть следующие классы

К какому результату приведет выполнение следующего кода:

Варианты ответов:

  1. ABC
  2. CCC
  3. ACC
  4. AAC

Ответ

ABC

Этот вопрос про раннее и позднее связывание

Переменная a является типом A, но хранит ссылку на объект С.

Создается объект a типа A, который указывает на объект c типа C. Но объект c типа C, в свою очередь, является объектом классов A и B. Поэтому, при вызове метода print1() у этого объекта вызывается переопределенный метод Print1() из класса B.

Это называется сокрытием методов. В классе С вы сокрыли метод Print2() базового класса А, поэтому когда вы обращаетесь с.Print2() выводится С. Но a.Print2() выведет А потому, что вы обратитесь к нему через ссылку на класс А(базовый класс) и таким образом вызовете метод из класса А.

a.Print2() выведет A

a.Print1() выведет B (позднее связывание)

c.Print2()  (раннее связывание, выведет С из-за сокрытия метода оператором new в классе C)

Вопрос 8

Пропущен…

This entry was posted in C#. Bookmark the permalink.