Вопрос:

class Test : Interface1, Interface2 { void Interface1.Execute() { } Console.WriteLine("A"); void Interface2.Execute() { } } Console.WriteLine("B"); При исполнении следующей ниже программы ... Test t = new Test(); t.Execute(); выведется "А" выведется "В" код не скомпилируется

Смотреть решения всех заданий с листа

Ответ:

Задача

У нас есть класс Test, который реализует два интерфейса: Interface1 и Interface2. Каждый интерфейс имеет метод Execute().

  • Метод Interface1.Execute() выводит на экран букву "A".
  • Метод Interface2.Execute() выводит на экран букву "B".

При создании объекта t типа Test и вызове метода t.Execute(), возникает неопределенность, какой именно метод Execute() будет вызван, так как он реализован для обоих интерфейсов. В C# при явной реализации методов интерфейса, эти методы становятся недоступными напрямую через экземпляр класса, если они не были продублированы как обычные методы класса. В данном коде нет явных вызовов ((Interface1)t).Execute() или ((Interface2)t).Execute(). При вызове t.Execute() компилятор не сможет определить, какой из двух методов Execute (из Interface1 или Interface2) должен быть вызван, поскольку оба метода имеют одинаковое имя и сигнатуру, и нет явного указания, какой из них использовать.

Поэтому код не скомпилируется.

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

1. выведется "А"

2. выведется "В"

3. код не скомпилируется

Правильный ответ: 3

ГДЗ по фото 📸
Подать жалобу Правообладателю