所以我们有这个:
public interface IWidget
{
int Id { get; set; }
}
public class Widget : IWidget
{
public int Id { get; set; }
}
public class WidgetProcessor
{
public static void ProcessWidgets1(IList<IWidget> widgets)
{ }
public static void ProcessWidgets2<T>(IList<T> widgets) where T : IWidget
{ }
}
我明白为什么这不会编译:
WidgetProcessor.ProcessWidgets1(new List<Widget>());
围绕协方差的 C# 规则明智地说它不应该,或者你可能会遇到各种顽皮,正如在其他地方详细解释的那样。
但是 ProcessWidgets2:什么...?
它是如何编译和运行的:
WidgetProcessor.ProcessWidgets2(new List<Widget>());
期待消除我的无知,但我看不出 ProcessWidgets1 和 ProcessWidgets2 (实际上)有何不同。