В C# 8.0 была представлена реализация интерфейса по умолчанию. Теперь вы можете написать такой интерфейс
interface IFoo{
void DoDefaultThing(){
// Do some default stuff here
}
void DoSomethingElse();
}
И класс реализует его
public Foo: IFoo{
public void DoSomethingElse(){
// Implementation
}
}
В настоящее время у меня есть метод generi c с ограничением типа на Foo
public void UseFoo<T>(T foo) where T:Foo{
foo.DoSomethingElse();//Valid
foo.DoDefaultThing();//Compiler error
}
Я мог бы обойти это ограничение, добавив ограничение интерфейса
public void UseFoo<T>(T foo) where T:Foo,IFoo{
foo.DoSomethingElse();//Valid
foo.DoDefaultThing();//Now Valid
}
Это ограничение компилятора?