泛型,泛型类与动态类
1.泛型是什么?
泛型就是指类型参数化技术,就是指给类型赋予了参数的性质,我们传什么类型给这个参数,这个参数就显示什么类型,通过泛型就能够在同一份代码中实现多种类型处理
创建类型参数的语法就是 < 参数名 > -- 我们给这个参数传什么类型,这个参数就会显现出什么类型的数据特性 --- 所以称之外泛型
泛型参数常用T来表示,T是Type的缩写,Type是类型的意思
2.泛型类是类的一种,这种类的特点是 “这个类中的某些字段的类型是不确定 --- 即泛型” ,这些类型可以在类构造的时候确定下来
3.泛型类的创建语法
class 类型名<泛型参数>
{
在这里面我们就能够调用泛型参数
}
在通过泛型类实例化对象的时候,我们必须给泛型参数传一个参数(这个参数是各种类型!)
实例化对象的时候泛型参数的传递就在类名的后面进行(无论是对象的声明还是对象的定义都需要进行泛型参数传参)
4.在类中通过泛型创建的字段(变量)之间不能够进行+,-,*,/运算符操作,因为这些字段的类型是可变的,编译器无法确定这些字段是否能够相加,于是就禁止了泛型变量之间的运算符操作
为了解决上面这个问题 --- 人们引入了dynamic(动态)类型
编程语言有时可以划分为静态类型化语言和动态类型化语言,一般而言,动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型
dynamic language runtime -- 动态语言运行时
通过动态类型dynamic创建的对象可以直接跳过编译时的类型检查,然后在代码运行时动态检查对象的类型 --- 这样字的化编译器就不需要去判断类型是否能够进行运算符操作了(解决不了问题就解决问题本身,直接跳过编译判断这一步)
然后通过动态类型创建的对象可以直接被变量赋值,以及进行运算符操作,其实相当于我们创建了一个动态变量,这个动态变量的类型在编译时不被检查,只有在程序运行时才被动态检查(就是执行代码到它了才检查)
为什么要加一个强制类型转换呢?
因为我们要返回的是泛型参数类型的值,而不是一个动态类型的值
ToString方法(方法其实就是函数)
1.在每一个类中都有一个ToString方法,这个ToString方法的作用就是将调用它的对象所属的命名空间名和类名以字符串的形式输出 --- 输出格式: 项目名 . 类名
如下图
2.调用ToString方法的方式:
一.直接对象点操作符调用
二.直接将对象以字符串的形式输出
3.ToString方法是能够被重写的,原因是ToString方法是属于Object类中的成员函数(且已经被virtual修饰),而这个Object类是所有的类都会继承(间接继承或直接继承的方式)的父类,所以我们可以直接在子类中直接用override关键字进行函数重写
泛型方法(函数)
泛型方法的定义:
泛型参数的位置在函数名的右边出现,使用了泛型参数的函数就是泛型方法了