Почему ограничение типа для базового класса не показывает реализацию интерфейса по умолчанию? - PullRequest
1 голос
/ 28 апреля 2020

В 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
}

Это ограничение компилятора?

...