泛型

泛型

带有<>符合的类型,就叫泛型
T:Type

作用:代码重用,提高效率,类型安全

分类:泛型方法,泛型类

泛型方法:

Public T 方法名(T t)
{

}

基本使用

 public static T SayHello<T>(T t)
        {
            return t;
        }
 int i = SayHello<int>(1);
string ii = SayHello<string>("a");
double db = SayHello<double>(3.14);
Program pro = SayHello<Program>(new Program());
Children children = SayHello<Children>(new Children());
	

	
//用泛型当作参数使用时,在调用该方法时,可以根据参数推断出类型,也就是可以在使用时不用给类型,直接写参数
        public static void Show<T>(T param)
        {

            Console.WriteLine(param.GetType().Name + " " + param);
        }


        //当返回值使用,调用这个方法时候再具体给返回值类型
        public static T Show<T>()
        {

            //为什么不能直接返回T,因为值类型可以为null,引用类型不可以为null,而且在这个方法里还不确定具体返回是值类型还是引用类型。
            //default关键字,如果返回的是一个为空的引用类型,那就返回null,值类型就返回0,
            return default(T);

        }


        //当局部变量使用,一般都要加约束
        public static T Show<T>(int a) where T : struct
        {

            T t = new T();//值类型都有一个隐式的公共无参数的构造方法

            return t;
        }
	
	
	

泛型类

//泛型类
    public class Person<T>
    {
        public T Name { get; set; }

    }

泛型约束

可以限制泛型传递的类型
where T:struct :限制T必须是值类型

where T:class :限制T必须是引用类型

where T:new() :限制T必须有一个无参构造函数

where T:具体的类 :类本身和它的子类

组合约束:where T:具体的类,new()

比如:要求数泛型必须是某个类的子类

public static T SayHello<T>(T t) where T : Program, new()
        {
            return t;
        }
 Program pro = SayHello<Program>(new Program());
            Children children = SayHello<Children>(new Children());	

上面用到的Children类是Program的子类

上一篇:codeforces 1467C. Three Bags


下一篇:TypeScript与面向对象