ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

泛型

2021-10-30 17:07:01  阅读:192  来源: 互联网

标签:类型 SayHello 泛型 new where public


泛型

带有<>符合的类型,就叫泛型
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的子类

标签:类型,SayHello,泛型,new,where,public
来源: https://www.cnblogs.com/fhzmasl/p/15485439.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有