Я просто изучаю методы расширения С# и задаюсь вопросом, могу ли я использовать его для предоставления реализации по умолчанию для интерфейса.
Скажи:
public interface Animal {
string MakeSound();
}
public static string MakeSound(this Animal) {
return "";
}
Тогда
public class Dog : Animal {
string MakeSound() {
return "Bark";
}
}
public class Porcupine : Animal {
}
И последнее:
Animal dog = new Dog();
Animal porcupine = new Porcupine();
Print(dog.MakeSound());
Print(porcupine.MakeSound());
Я хотел бы, чтобы дикобраз и другие животные, которые явно не реализовали MakeSound
, использовать метод расширения по умолчанию, который возвращает пустую строку, но собака и любое животное, которое имеет явную реализацию, возвращают свою собственную реализацию, такую как "Кора".
Итак, мои вопросы: 1. Это выполнимо? 2. Если нет, есть ли другой способ реализовать поведение по умолчанию для интерфейса?
Абстрактный класс вместо интерфейса не является опцией, потому что С# не поддерживает множественное наследование, а мои классы наследуют поведение другого класса.