public void GenericityContravariant()
        {
            // 直接声明Animal类
            Animal animal = new Animal();

            Console.WriteLine($"{animal.GetType()}");

            // 直接声明Cat类
            Cat cat = new Cat();

            Console.WriteLine($"{cat.GetType()}");

            // 声明子类对象指向父类
            Animal animal2 = new Cat();

            Console.WriteLine($"{animal2.GetType()}");

            // 声明Animal类的集合
            List <Animal> listAnimal = new List <Animal>();

            foreach (var item in listAnimal)
            {
                Console.WriteLine($"{item.GetType()}");
            }

            // 声明Cat类的集合
            List <Cat> listCat = new List <Cat>();

            foreach (var item in listCat)
            {
                Console.WriteLine($"{item.GetType()}");
            }

            ICustomerListIn <Cat> customerListCat1 = new CustomerListIn <Cat>();

            Console.WriteLine($"{customerListCat1.GetType()}");

            ICustomerListIn <Cat> customerListCat2 = new CustomerListIn <Animal>();

            Console.WriteLine($"{customerListCat2.GetType()}");
            Assert.IsTrue(true);
        }
示例#2
0
 public void Tshow()
 {
     //协变:接口泛型参数加了个out,就是为了解决上述的问题
     {
         ICustomerListOut <Bird> customerList2 = new CustomerListOut <Sparrow>();
         customerList2.Get();/*有返回值*/
     }
     //逆变
     {
         ICustomerListIn <Sparrow> customerList1 = new CustomerListIn <Bird>();
         customerList1.Show(new Sparrow()
         {
             Id = 1, Name = "张三"
         });                                                       /*有参数*/
     }
     {
         IMyList <Sparrow, Bird> myList2 = new MyList <Sparrow, Sparrow>(); //协变
         IMyList <Sparrow, Bird> myList3 = new MyList <Bird, Bird>();       //逆变
         IMyList <Sparrow, Bird> myList4 = new MyList <Bird, Sparrow>();    //协变+逆变
     }
 }
示例#3
0
 public static void Show()
 {
     {
         Bird    parent1 = new Bird();
         Bird    parent2 = new Sparrow();
         Sparrow child   = new Sparrow();
     }
     {
         List <Bird> birdList = new List <Bird>();
         //List<Bird> birdList1 = new List<Sparrow>();//两个list泛型实例不存在继承关系,
         //每只麻雀都是一只鸟,但是list不知道,需要强制去转
         List <Bird> birdList2 = new List <Sparrow>().Select(c => (Bird)c).ToList();//把每一只麻雀转换为bird
     }
     {
         IEnumerable <Bird> birdList1 = new List <Bird>();
         IEnumerable <Bird> birdList2 = new List <Bird>();
     }
     {
         ICustomerListOut <Bird> customerList  = new CustomerListOut <Bird>();
         ICustomerListOut <Bird> customerList1 = new CustomerListIn <Sparrow>();
     }
 }