C# «не может преобразовать» общий класс в свой ковариатный интерфейс [дублировать]C#

Место общения программистов C#
Ответить
Anonymous
 C# «не может преобразовать» общий класс в свой ковариатный интерфейс [дублировать]

Сообщение Anonymous »

Я ожидал, что этот код будет компилировать, но это не так. В обоих .NET Framework 4.8 и .net 8 сборка не удается с ошибкой аргумент 1: не может преобразовать из 'foo ' в 'ifoo ' .

Код: Выделить всё

interface IBar { }
interface IFoo where TBar : IBar { }
class Foo : IFoo where TBar : IBar
{
void TakeFoo(IFoo foo) { }
void TakeThis() => TakeFoo(this); // doesn't compile
}
Учитывая то, что и out положения, конечно, Foo должен быть ifoo , верно? Или это запрещено, потому что разрешение на это каким -то образом вызовет небезопасную ситуацию, когда TakeFoo может вызвать метод на foo , которая возвращает tbar и получить значение, которое не является ibar ?

Подробнее здесь: https://stackoverflow.com/questions/797 ... -interface
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»