У меня возникли проблемы с пониманием того, почему следующий фрагмент не дает мне ошибки
public void SomeMethod<T>(T arg) where T : MyInterface
{
MyInterface e = arg;
}
Но этот, который, как я ожидаю, будет работать из-за ограничения универсального типа
private readonly IList<Action<MyInterface>> myActionList = new List<Action<MyInterface>>();
public IDisposable Subscribe<T>(Action<T> callback) where T: MyInterface
{
myActionList.Add(callback); // doesn't compile
return null
}
Выдает эту ошибку
cannot convert from 'System.Action<T>' to 'System.Action<MyInterface>'
Я использую VS2012 sp1 и .NET 4.5.
Может ли кто-нибудь объяснить, почему ограничение не позволяет это скомпилировать?
new IList
? Это настоящая декларация? - person Paolo Tedesco   schedule 25.03.2013System.Action<MyInterface>
представляет функцию с одним параметром типаMyInterface
, аSystem.Action<T>
представляет метод с параметром типаT : MyInterface
. Сигнатуры функций несовместимы, не имеет значения, чтоT
является производным отMyInterface
, сигнатура будет совместима только в том случае, еслиT
будет точноMyInterface
. - person odyss-jii   schedule 25.03.2013