@cicatrix
было бы большой ошибкой думать

Как из класса, реализующего интерфейс, вызвать реализацию метода по умолчанию?

Вот есть интерфейс:
interface IBar
{
     void FooMethod()
     {
          Console.WriteLine("This is a default interface implementation!");
     }
}

Есть класс, реализующий интерфейс:
class MyClass : IBar
{
     void FooMethod()
     {
          // Вот здесь хочется выполнить сначала реализацию по умолчанию
          // Что-то типа base.FooMethod(), как если бы это было при наследовании от базового класса
          Console.WriteLine("This is an overriden implementation!");
     }
}

Чтобы в консоль вывелось обе надписи:
This is a default interface implementation!
This is an overriden implementation!
  • Вопрос задан
  • 56 просмотров
Решения вопроса 2
vabka
@vabka Куратор тега C#
Токсичный шарпист
Изначально предполагалась возможность использовать синтаксис base(IBar):
https://learn.microsoft.com/en-us/dotnet/csharp/la...
Но такое ощущение, будто это в итоге не было реализовано (и слава богу)
Ответ написан
Комментировать
@cicatrix Автор вопроса
было бы большой ошибкой думать
Василий Банников, на SO нашёл вот такой костыль:
public class HappyGreeter : IGreeter
{
    private interface IWorkAround : IGreeter
    {
        public void SayHello(string name)
        {
            (this as IGreeter).SayHello(name);
            System.Console.WriteLine("I hope you're doing great!!");
        }
    }

    private class WorkAround : IWorkAround {}

    public void SayHello(string name)
    {
        ((IWorkAround)new WorkAround()).SayHello(name);
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы