4

重複の可能性:
C# 4.0 のクラスに一般的な差異がないのはなぜですか?

例:

interface foo<out T> where T : BaseThing { }

コンパイルする

class foo<out T> where T : BaseThing { }

ではない。

これはサポートされていないだけですか、それとも機能しない、または論理的に意味をなさない何らかの理由がありますか?

編集:誰かが疑問に思っている場合に備えて、私がやりたかったことは次のとおりです...

        class BaseThing { }
        class DerivedThing : BaseThing { }

        class foo<out T> where T : BaseThing { }
        class bar : foo<DerivedThing> { }

        private void test()
        {
            foo<BaseThing> fooInstance = new bar();
        }
4

1 に答える 1

3

修飾子は、out型パラメーターが共変であることをコンパイラーに伝えます。これは、T の型の使用がより派生的である可能性があることを意味します。特定のクラス (構築されたジェネリック型など) を使用しているため、具象型のインスタンスは 1 つしかないため、より派生した型は使用されません。複数のタイプが foo のようなインターフェースを実装できます。つまり、異なるタイプの T を扱っている可能性があります。この場合、それらの T タイプの 1 つがより派生している可能性があります。

于 2012-08-10T19:05:12.340 に答える