泛型

1,泛型方法

  

2,泛型类

  Public Class PersonHelper<T>Where T:Person,new()//确定了该类一定是    Person类或子类 new()表示可以用T t=new T();来实例化
  {
         //用反射来进行T的实例化
        T o=(T)Activator.CreateInstance(Typeof(T));
  }    

 3,协变(out T)和逆变 (in T)

class Program
    {
        static void Main(string[] args)
        {
            //逆变和协变的原理——父类可以接受子类,里氏替换原则
            IMyOut<Person> mp = new MyOut<Student>();
            // out Person,相当于 
            Person p = new Student();
            mp.GetT();

            //MyIn里面接受的是Person,用Peron去接 接口传入的Student当然可以
            IMyIn<Student> ms = new MyIn<Person>();
            ms.GetT(new Student()
            {
                ID = 1,
                UserName = "Ace"
            });
        }
    }
    class Person
    {
        public string UserName { get; set; }
        public int ID { get; set; }
    }
    class Student:Person
    {

    }
    //协变
    interface IMyOut<out T> 
    {
        T GetT();
    }
    //逆变
    interface IMyIn<in T>
    {
        void GetT(T t);
    }
    class MyOut<T> : IMyOut<T>
    {
        public T GetT()
        {
            return default;
        }
    }
    class MyIn<T> : IMyIn<T>
    {
        public void GetT(T t)
        {
           
        }
    }
View Code

 

posted @ 2021-11-18 19:33  浩鑫  阅读(64)  评论(0)    收藏  举报