непонятки с ковариантностью
От: Visor2004  
Дата: 12.01.12 10:54
Оценка:
Вот такое пишет ошибку

  public interface INativeResourceHolder [ +T ] where T : INativeResource
  {
    Resource : T
    {
      get;
      set;
    }
  }

пишет такую ошибку

type of `set_Resource' method's parameter `value' must behave contravariantly

Помните!!! ваш говнокод кому-то предстоит разгребать.
Re: непонятки с ковариантностью
От: catbert  
Дата: 12.01.12 11:02
Оценка: 1 (1)
Здравствуйте, Visor2004, Вы писали:


V>Вот такое пишет ошибку


V>
V>  public interface INativeResourceHolder [ +T ] where T : INativeResource
V>  {
V>    Resource : T
V>    {
V>      get;
V>      set;
V>    }
V>  }
V>

V>пишет такую ошибку

V>

V>type of `set_Resource' method's parameter `value' must behave contravariantly


Ну да, так и должно быть. Сеттер же обычный метод, а параметры методов должны быть контравариантны:

def pigHolder : INativeResourceHolder[Pig] = GetPigHolder()
def animalHolder : INativeResouceHolder[Animal]; // ковариантность

animalHolder.Resource = Tiger(); // если бы set не был  контравариантным, можно было бы делать так

Как правило, ковариантные generic-типы должны быть read-only, а контравариантные — "write-only" относительно T
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.