Ковариантность

Почему при ковариантности в обобщениях, применительно к интерфейсам, запрещено использовать метод доступа set?

пр. нельзя сделать так:

public interface IContainer

{

T Figure1 { get; }

T Figure2 { set; }

}

...

Потому что нельзя неявно присвоить в переменную производного типа значение базового.

using System;

namespace ConsoleApplication3

{

public interface IContainer

{

T Figure1 { get; }

//T Figure2 { set; }

}

class MyClass : IContainer where T : new()

{

private T field1 = new T();

public T Figure1 { get { return field1; } }

//private T field2 = new T();

//public T Figure2 { set { field2 = value; } }

}

class A { }

class B : A { }

class Program

{

static void Main(string[] args)

{

IContainer obj = new MyClass();

Console.WriteLine(obj.Figure1);

//--- Figure2 типа B, а после приведения класса к интерфейсу Figure2 может принимать A

//--- Но при этом физически тип в классе все равно остался В.

//--- Поэтому и нельзя так делать при ковариантности.

//obj.Figure2 = new A();

}

}

}