Придумайте программу, результат которой зависит от того в каком порядке указаны реализованные интерфейсы в декларации класса. Рефлекшн не использовать.
Подсказка: нужно использовать ковариантные интерфейсы.
Здравствуйте, nikov, Вы писали:
N>Придумайте программу, результат которой зависит от того в каком порядке указаны реализованные интерфейсы в декларации класса. Рефлекшн не использовать.
Здравствуйте, Алексей., Вы писали:
А>Здравствуйте, nikov, Вы писали:
N>>Придумайте программу, результат которой зависит от того в каком порядке указаны реализованные интерфейсы в декларации класса. Рефлекшн не использовать.
А>Баг в компиляторе/спецификации?
Это проблема, о которой было известно еще на этапе дизайна C# 4.0, но ее решили оставить как есть.
Здравствуйте, 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;
}
}
Здравствуйте, QrystaL, Вы писали:
N>>Это проблема, о которой было известно еще на этапе дизайна C# 4.0, но ее решили оставить как есть.
QL>А как вообще планируют ее решать в будущем?
Не слышал, чтобы что-то планировалось. А как бы ты предложил ее решить? Может быть, стоит добавить какие-то warning-и (если не в компиляторе, то, например, в ReSharper-е)?