2
class Program
{
    static void Main(string[] args)
    {
        //GrandFather gf = new Son();
        IGF<Father> igf = new MyClass();
    }
}
public class Father
{

}
public class Son : Father
{
}
public class MyClass : IGF<Son>
{
    public void Method()
    {
        //DoSomething
    }
}
public interface IGF<T> where T : Father
{
    void Method();
}

スーパークラスでジェネリック クラスを使用するときに質問があります。list を使用するときは、常に IList ss=new List(); と言うので、6 行目が間違っている理由を誰か教えてください。

4

1 に答える 1

5

C# 4.0 を使用している場合は、outキーワードをIGF実装に追加して、共変のインターフェイスにすることができます。これにより、基本クラス (ここではFather) を持つジェネリックを作成し、派生ジェネリック型 ( ) を持つ同じインターフェイスのインスタンスを指すようにすることができますSon

于 2012-11-13T01:39:35.113 に答える