[C# 4.0, Этюд] Ковариантные интерфейсы
От: nikov США http://www.linkedin.com/in/nikov
Дата: 10.03.10 15:27
Оценка: 39 (4)
Придумайте программу, результат которой зависит от того в каком порядке указаны реализованные интерфейсы в декларации класса. Рефлекшн не использовать.
Подсказка: нужно использовать ковариантные интерфейсы.
Re: [C# 4.0, Этюд] Ковариантные интерфейсы
От: Алексей.  
Дата: 10.03.10 15:32
Оценка:
Здравствуйте, nikov, Вы писали:

N>Придумайте программу, результат которой зависит от того в каком порядке указаны реализованные интерфейсы в декларации класса. Рефлекшн не использовать.


Баг в компиляторе/спецификации?
Re[2]: [C# 4.0, Этюд] Ковариантные интерфейсы
От: nikov США http://www.linkedin.com/in/nikov
Дата: 10.03.10 15:38
Оценка:
Здравствуйте, Алексей., Вы писали:

А>Здравствуйте, nikov, Вы писали:


N>>Придумайте программу, результат которой зависит от того в каком порядке указаны реализованные интерфейсы в декларации класса. Рефлекшн не использовать.


А>Баг в компиляторе/спецификации?


Это проблема, о которой было известно еще на этапе дизайна C# 4.0, но ее решили оставить как есть.
Re: [C# 4.0, Этюд] Ковариантные интерфейсы
От: desco США http://v2matveev.blogspot.com
Дата: 10.03.10 15:51
Оценка: 77 (7)
Здравствуйте, nikov, Вы писали:

N>Придумайте программу, результат которой зависит от того в каком порядке указаны реализованные интерфейсы в декларации класса. Рефлекшн не использовать.

N>Подсказка: нужно использовать ковариантные интерфейсы.

    class Program
    {
        static void Main(string[] args)
        {
            Do(new C());
        }

        static void Do(IFoo<object> i)
        {
            i.Get();
        }
    }

    interface IFoo<out T>
    {
        T Get();
    }


    class C : IFoo<Program>, IFoo<string> // если поменять порядок, будет выведена 1 
    {

        string IFoo<string>.Get()
        {
            Console.WriteLine("1");
            return null;
        }

        Program IFoo<Program>.Get()
        {
            Console.WriteLine("2");
            return null;
        }

    }
Re[3]: [C# 4.0, Этюд] Ковариантные интерфейсы
От: QrystaL Украина  
Дата: 11.03.10 10:20
Оценка:
N>Это проблема, о которой было известно еще на этапе дизайна C# 4.0, но ее решили оставить как есть.

А как вообще планируют ее решать в будущем?
Re[4]: [C# 4.0, Этюд] Ковариантные интерфейсы
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.03.10 10:24
Оценка:
Здравствуйте, QrystaL, Вы писали:

N>>Это проблема, о которой было известно еще на этапе дизайна C# 4.0, но ее решили оставить как есть.


QL>А как вообще планируют ее решать в будущем?


Не слышал, чтобы что-то планировалось. А как бы ты предложил ее решить? Может быть, стоит добавить какие-то warning-и (если не в компиляторе, то, например, в ReSharper-е)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.