共分散と反共分散を紹介する良い記事を読みました
http://bartdesmet.net/blogs/bart/archive/2009/04/15/14377.aspx
反変パラメーターは、入力位置 (メソッド パラメーター、セットのみのプロパティ、またはインデクサー) でのみ発生する必要があります。
class SubClass : BaseClass {
public void PrintSubClass() {}
}
class BaseClass{
}
static class Sample {
public static void PrintMeNow (SubClass c)
{
c.PrintSubClass();
}
}
static void Main(string[] args)
{
SubClass sc = new SubClass();
BaseClass bc = new BaseClass();
Sample.PrintMeNow(sc); // ok
Sample.PrintMeNow(bc); // Line A (not-ok Question: Is this contravariance?)
}
反変性の理解に基づいて、上記のようにコードを配置しました。明らかに、線 A は正しくなく、反変性の概念を誤解しています。
どの部分が間違っていますか?正しく理解されていない概念は何ですか? それを正しくする方法は?