c# 試験 共分散は具体的なタイプに勝る?



自己 共 分散 意味 (1)

これは、共分散がより強いからではなく、C#が最初に「より近い」方法を選択するためです。 だから、 Child.Foo() 、それが適用可能であると判断し(共分散のおかげでChild.Foo()Child.Foo()も見ない。

ここでの前提は、特定の型がもっと「知っている」ということなので、そのメソッドを最初に考慮する必要があります。

C#4仕様の§7.6.5.1を参照してください。

候補メソッドのセットは、最も派生したタイプのメソッドのみを含むように縮小されます。セット内の各メソッドCFについて、CがメソッドFが宣言されているタイプである場合、Cの基本タイプで宣言されたメソッドはすべて削除されますセット。

正直なところ(この質問の一部)を聞いていますが、今は別の関連の質問があります。

public class Base
{
    public void Foo(IEnumerable<string> strings)  { }
}

public class Child : Base
{
    public void Foo(IEnumerable<object> objects) { }
}


List<string> lst = new List<string>();
lst.Add("aaa");
Child c = new Child();
c.Foo(lst);

(n C#3はそれを呼び出します:C#4のChild.Fooを呼び出します)

Im in FW4! 、 では、それについて話しましょう

すべての共分散を考慮して、私がc.Foo(lst);と書くときc.Foo(lst);lstはSTRINGのIEnumerableです!) -

それは両方の署名を見ます! しかし、STILL - IEnumerable<object>選択しIEnumerable<object>か?

コンボリューションはコンクリート型よりも強くなりますか?





covariance