Интерфейсы

Последнее обновление: 18.07.2018
Вопрос 1

Что неправильно в определении следующих интерфейсов:

public abstract interface IAction
{
	void Move();
}
internal interface IRunAction : IAction
{
	void Run();
}

Варианты ответов (ответов может быть несколько):

  • Интерфейсы не могут иметь модификатор доступа internal

  • Интерфейсы не могут иметь модификатор abstract

  • Интерфейс IRunAction должен определить метод Move, так как базовый интерфейс IAction является абстрактным

  • От абстрактного интерфейса нельзя наследоваться

Интерфейсы не могут иметь модификатор abstract.

Вопрос 2

Дана следующая программа:

using System;

namespace HelloApp
{
    class Program
    {
        static void Main(string[] args)
        {
            IAction action = new RunAction();
            action.Move();

            Console.ReadKey();
        }
    }

    class RunAction : IRunAction
    {
        internal void Move()
        {
            Console.WriteLine("I am running");
        }
    }

    interface IAction
    {
        void Move();
    }
    interface IRunAction : IAction
    {
        new void Move();
    }
}

Почему данная программа не скомпилируется? Варианты ответов:

  • Потому что метод Move в IRunAction определен с ключевым словом new

  • Потому что в обоих интерфейсах определен метод Move, и программа не знает, какой именно из этих методов вызывать

  • Потому что метод Move в классе RunAction определен с модификатором internal

  • Потому что класс RunAction должен определить две реализации метода Move для каждого из интерфейсов

При реализации метода интерфейса в классе данный метод может иметь только модификатор public. Определение реализации с модификатором internal некорректно.

Вопрос 3

Класс Tester реализует интерфейсы IFoo и IBar:

interface IFoo
{
	void Execute();
}
interface IBar
{
	void Execute();
}
class Tester : IFoo, IBar
{
	public void Execute()
	{
		Console.WriteLine("Tester Executes");
	}
}

Метод Execute() какого именно интерфейса реализует класс Tester?

Класс Tester реализует метод Execute сразу обоих интерфейсов.

Вопрос 4

Класс Tester реализует интерфейсы IFoo и IBar:

interface IFoo
{
	void Execute();
}
interface IBar
{
	void Execute();
}
class Tester : IFoo, IBar
{
	void IFoo.Execute()
    {
        Console.WriteLine("IFoo Executes");
    }
    void IBar.Execute()
    {
		Console.WriteLine("IBar Executes");
	}
}

Реализация метода Execute() из какого интерфейса будет вызвана в следующем коде:

Tester t = new Tester();
t.Execute();

Выше приведенный код не будет скомпилирован. Необходимо явно указать, реализацию какого интерфейса мы хотим использовать, например, с помощью операции приведения типов:

Tester t = new Tester();
(t as IFoo).Execute();
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850