Назначение интерфейсной переменной в реализации класса C# - PullRequest
1 голос
/ 01 февраля 2020

Итак, начинаем знакомиться с Rider IDE. Я определил интерфейс, а затем создал класс для реализации интерфейса. Когда я использовал исправление Roslyn для реализации элементов интерфейса, он генерировал нечто, чего я раньше не замечал, и мне интересно, какова его цель.

interface IThing
{
    string GetThing();
}

Затем, когда я генерирую шаблон:

class ThingClass : IThing
{
    private IThing ThingImplementation;

    public string GetThing()
    {
        throw new NotImplementedException();
    }
}

Итак, что является экземпляром IThing ThingImplementation для?

1 Ответ

1 голос
/ 01 февраля 2020

Rider предлагает два быстрых исправления для реализации интерфейсов.

Rider quick fixes

Первое «Реализация отсутствующих элементов» дает следующий (ожидаемый) код:

class ThingClass : IThing
{
    public string GetThing()
    {
        throw new System.NotImplementedException();
    }
}

Второй вариант «Делегировать реализацию« IThing »новому полю» дает код в исходном вопросе:

class ThingClass : IThing
{
    private IThing thingImplementation;
    public string GetThing()
    {
        return thingImplementation.GetThing();
    }
}

Вторая версия полезна, когда вы хотите изменить реализации "на лету". Может быть, в зависимости от параметра конструктора или любого другого варианта использования.

...