C>Но это только в классах. В интерфейсах — нет.
C>Вопрос — почему?
Может про интерфейсы команда шарпа думала что методы интерфейса вместе связаны, и хотела сохранить некую консистентность между ними
И потому сделали ковариантность возвращаемых значений пачке методов через out T. Наверное их идея была в том, что класс реализует внутри себя максимально специфичную версию, а пользователь уж выбирает подходящего предка.
Кстати, если иерархия будет Class2 : (Class1 : IA<object>), всё равно пример правильно отработает. Но в "сложной иерархии" с out и без out поведение будет разное.
using System;
using System.Collections;
using System.Collections.Generic;
interface IA<out T>
{
T GetT();
}
class Class2 : IA<string>
{
public string GetT() => "str";
}
public class HelloWorld
{
public static void Main(string[] args)
{
Class2 c = new();
IA<object> ia = c; //кому нужен object - тот использует object
Console.WriteLine(ia.GetT());
}
}
C>У меня — середина дня. Про разные зоны времени никогда не слышал?
А, ну значит всё наоборот, эт я с трудом догоняю...