c# 接口的协变和逆变

如果派生类只是用于输出值,那么这种结构化的委托有效性之间的常数关系叫做协变

就是创建一个派生类委托对象 让派生类赋值给基类对象 协变关键字out

对期望传入基类时允许传入派生对象的特性叫逆变  逆变关键字in

看一下实现代码

    class Animal { public string Name; }
    class Dog:Animal { }

    interface Im<out T>//协变
    {
        T GetT();
    }
    class MyClass<T> : Im<T>
    {
        public T[] item = new T[2];
        public T GetT()
        {
            return item[0];
        }
    }

    class Program
    {
        static void DoSomething(Im<Animal> im)
        {
            Console.WriteLine(im.GetT().Name);
        }

        static void Main(string[] args)
        {
            MyClass<Dog> myClass = new MyClass<Dog>();
            myClass.item[0] = new Dog() { Name = "AVT" };

            Im<Animal> ANIMAL = myClass;
            DoSomething(myClass);
        }
    }
原文地址:https://www.cnblogs.com/feizianquan/p/10095985.html