だから私たちはこれを持っています:
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 が (事実上) どのように違うのかわかりません。