我不清楚为什么下面的代码段不是covarient?为什么C#out泛型类型参数违反协方差?
public interface IResourceColl<out T> : IEnumerable<T> where T : IResource {
int Count { get; }
T this[int index] { get; }
bool TryGetValue(string SUID, out T obj); // Error here?
}
错误1无效方差:类型参数 'T' 必须是 'IResourceColl.TryGetValue(字符串,出T)' 不变地 有效。 'T'是 covariant。
我的界面只在输出位置使用模板参数。我可以很容易地重构这个代码,以类似
public interface IResourceColl<out T> : IEnumerable<T> where T : class, IResource {
int Count { get; }
T this[int index] { get; }
T TryGetValue(string SUID); // return null if not found
}
,但我想了解,如果我原来的代码实际上违反了协方差或者如果这是协方差的编译器或.NET的限制。
的可能重复[C#:为什么不呢?做“裁判”和“出”支持多态性(HTTP://计算器。 COM /问题/ 1207144/C锋利为什么-犯规,裁判和出支持多态) – Jon 2012-01-18 16:43:37
这里要注意的重要一点是,['out'](http://msdn.microsoft.com/en -us /库/ ee332485.aspx)(参数改性剂)是完全无关的(http://msdn.microsoft.com/en-us/library/dd469487.aspx)(使用[out'']在通用型参数)。 – Jon 2012-01-18 16:44:50
@Jon - 这个问题适用于C#3.0和之前的版本。这里描述的语法是C#4.0 – Oded 2012-01-18 16:44:57