0

共分散と反共分散を紹介する良い記事を読みました

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 は正しくなく、反変性の概念を誤解しています。

どの部分が間違っていますか?正しく理解されていない概念は何ですか? それを正しくする方法は?

4

1 に答える 1

3

共分散と反分散は、一般的なパラメーターに関するものです。あなたのコードはそれとは何の関係もありません。

ではないため、機能しませbcSubClass
すべてのSubClasses はes ですが、すべてのesはBaseClasses ではありません。BaseClassSubClass

于 2011-06-03T21:50:42.287 に答える