C#语言——泛型的使用和了解

学习目标:掌握泛型各种形式的使用

为什么使用泛型

1. 函数重载—代码量大,且不完整
2. Objcet类型频繁使用—装箱、拆箱 不安全
3. 运行时—可以先不确定类型—>占位符推迟到代码运行时解决,可以更合理的去进行代码的设计
4. 占位符(参数化类型)—泛型----<>声明符号 占位符的名字不限通常情况下大写(代表的数据类型的格式)经常会用T这个字符

下面就是占位符的声明:
声明占位符:声明在类名或者方法名之后,数据类型占位符要在前面

在这里插入图片描述

什么是泛型?

所谓泛型,即通过参数化类型(占位符)来实现同一份带迈上操作多种数据类型,泛型编程是一种编程范式(模板),它利用"参数化类型"将类型抽象化,从而实现更为灵活的复用

泛型怎么使用?

1.泛型类: 属性不确定的情况下创建泛型类,模板—>属性(对象)、行为(类) 泛型类更像是一个模版。代码如下: 在这里插入图片描述
泛型类一般不自定义 用在内置好的类型里在这里插入图片描述
2.泛型结构体:
轻量级的类,值类型包含:属性,行为,存储相同类型的数据—>容器—>集合,数组。储存不同的数据类型–>结构体—>C语言 结构体没有继承—不能继承类也不能继承结构体 只能继承接口! 不确定结构体中的类型 可以使用泛型结构体 结构体默认有无参构造,及时声明了有参构造,无参构造永远都在。结构体创建对象的时候可以new也可以不new!下面补一下结构体和类的区别

在这里插入图片描述
3.泛型方法:
泛型方法可以出现在泛型类中 ,泛型方法的占位符可以使用泛型类中的占位符!也可以出现在非泛型类中,必须要声明占位符!泛型方法—>先写普通方法—>不确定的参数类型—>占位符替换,不确定的返回值—>占位符替换

4.泛型接口:
1.什么是接口:
标准 规范 初级要求–>方法 属性 未实现的 也可以啥都不写,空接口也行。 其他数据类型可以做的,接口作为引用数据类型都可以做!可以做参数,做返回值,做成员变量。 接口内的元素:方法、属性、索引器、事件 不包含构造
形参是接口类型–实参是 继承过该接口的子类对象 使用频率高
接口做返回值—>具体的返回值为子类对象 使用较少
2.为什么?
类–完整方法 单继承
接口–未实现的 属性 扩展空间大 接口多继承
面向接口的编程
3.怎么用?
接口内的元素:方法、属性、索引器、事件 不包含构造
类、结构体继承后具体写实现
接口在类中如何使用:局部变量 成员变量 返回值
方法的参数不确定 或者 属性类型不确定的情况下用泛型接口!
接口中有属性 需要继承的类重写,必须补上字段,如果没有相应的字段,使用属性时,会报栈溢出的异常
在这里插入图片描述
4.泛型约束:
为什么?
如果在项目中我们的需求是,指定一些类型可以替换占位符—>>泛型约束
限定一些数据类型不可以替换占位符
怎么用?
where关键字
where 关键字+:约束类型
5种约束类型:
1.引用类型约束 where T:class
2.值类型约束 where U:struct
3.构造约束 约束替换这个占位符的数据类型必须有一个无参构造 where K:new() 这个约束对值类型的数据没有意义,结构体永远会有一个隐式的无参构造 这个约束会和引用类型class约束联用 K:class,new() 如果多个约束联用中间用‘,’隔开 new约束必须放最后一个
4.基类约束(指定类型约束)约束了指定类型以及子类 where M:Person
5.接口约束 where 占位符:接口类型
引用类型的约束 值类型的约束 这两个不可以同时使用
构造约束放在最后
基类约束接口的约束 同时使用时,类约束放在前面,接口约束放在后面
引用类型约束和基类约束不能同时使用,没有意义
Array类是数组的隐式的父类
Cat cat=new Cat(); new的意思是调用了构造函数
new Cat();匿名对象 没有名字的对象 只能使用一次 使用完后会垃圾回收走

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值