C#中泛型的用法
【摘要】 前言上一篇文章简单介绍了泛型,接下来一起看看泛型在C#中具体该如何用。具体泛型的使用有如下步骤:声明泛型类、创建构造类型、创建变量和实例。其实和类的使用一样,只是泛型在初始时,是不指定某类型的,而在使用过程中,确定具体类型。 泛型的用法声明泛型类 class Ahui<T,T2> { public T Age; pu...
前言
上一篇文章简单介绍了泛型,接下来一起看看泛型在C#中具体该如何用。
具体泛型的使用有如下步骤:
声明泛型类、创建构造类型、创建变量和实例。其实和类的使用一样,只是泛型在初始时,是不指定某类型的,而在使用过程中,确定具体类型。
泛型的用法
声明泛型类
class Ahui<T,T2>
{
public T Age;
public T2 Name;
}
创建构造类型
其实就是声明完泛型类,在使用时,需要告诉编译器能使用那些真实类型来替代占位符(类型参数)。编译器获取真实类型并创建构造类型 。
Ahui<int, string>
- 泛型类声明上的类型参数用做类型的占位符。
- 在创建构造类型时提供的真实类型是类型实参。
创建变量和实例
Ahui<int, String> ahui2 = new Ahui<int, string>();
可以从同一个泛型类型构建出很多不同的类类型。每一个都有独立的类类型。
Ahui<int, String> ahui2 = new Ahui<int, string>();
Ahui<int, int> ahui3 = new Ahui<int, int>();
泛型的应用
static void Main(string[] args)
{
Ahui<int, String> ahui2 = new Ahui<int, string>();
ahui2.Age = 28;
ahui2.Name = "Andy阿辉";
Console.WriteLine("输出");
Console.WriteLine("年龄:"+ahui2.Age);
Console.WriteLine("姓名:" + ahui2.Name);
Console.ReadKey();
}
泛型和非泛型栈的区别
非泛型(常规类型)
- 源代码更大,需要为每一种类型编写一个新的实现
- 无论每一个版本的栈是否会被使用,都会在编译的版本中出现
- 易于书写
- 更容易出现问题,后期的修改需要对应用到每一个可用的类型上
泛型
- 源代码更小,只需要一个实现
- 可执行文件中只会出现有构造类型的类型
- 比较难写,更加抽象
- 易于维护,只需要修改一个地方
类型参数的约束
泛型类由于定义时使用占位符来声明,所以不能有一些其它类型都有的共有方法,目前所有的C#对象最终都从Object类继承,它们都包括ToString()、Equals()以及GetType()。那么要让泛型类也拥有这些方法,就必须使用其泛型类的约束。
符合约束的类型参数叫做未绑定的类型参数,要让泛型变得更有用,需要提供额外的信息让编译器知道参数可以接受哪些类型。这些额外的信息叫做约束。
只有符合约束的类型才能替代给定的类型参数,来产生构造类型。
约束使用where字句列出
- 每一个有约束的类型参数有自己的where字句
- 如果形参有多个约束,它们在where字句中使用逗号分隔
class Ahui<T,T2> where T:IBaseInfo where T2: IComparable
{
public T Age;
public T2 Name;
}
寄语
人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。
原创不易,给个关注。
我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)