Re[5]: covariant return types
От: hi_octane Беларусь  
Дата: 28.10.24 20:29
Оценка: 9 (1)
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>У меня — середина дня. Про разные зоны времени никогда не слышал?

А, ну значит всё наоборот, эт я с трудом догоняю...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.