这是本文档旧的修订版!
90-8:泛型 <T>
38-15-1:概念 使用在类与方法上、 使用占位符T 来代表某种类型,编译期间决定其具体类型 类名称后面加 <T> 代表该类就是泛型类、不一定是T <M> <Myt> …… 泛型在实例化时、或使用时占位符T会被特化成指定的类型 为什么要加<T> 变成泛型类?
<T>:是类型占位符、表示还没决定具体是什么类型、先把这个位置占了、 如下例子: 当不确定类里面 是int[]类型数组 或者string[]类型数组 疑惑别的数组 38-15-1:泛型类:
class zhan<T>
{ //看做栈内存空间
private T[] zhan_Cpu = new T[300] ;
//将数据存入栈的方法
public void set(T valu , int index)
{
zhan_Cpu[index] = valu; //数据入栈
}
//将数据取出栈的方法
public T get(int index)
{
return zhan_Cpu[index];//数据取出
}
}
使用: static void Main(string[] args) { 对泛型类zhan的特化、特化为int类型的类
zhan<int> int_data = new zhan<int>();
// 此时int_data对象 内的数组zhan_Cpu读写都是int类型
zhan<string> str_data = new zhan<string>() ;
// 此时str_data对象 内的数组zhan_Cpu读写都是string类型
zhan<double> doub_data = new zhan<double>() ;
// 此时doub_data对象 内的数组zhan_Cpu读写都是double类型
}
38-15-1:泛型格式:
格式无返回值:
void fangfa<T> ( T a , T b)
{
}
格式有返回值:
public T fangfa1<T>(T a, T b)
{
return a + b; //报错运算符不能用于两个T类型的操作数
//编译器会在编译时会对参数ab校验是否正确、
dynamic da = a; //dynamic将类型校验推延到运行时、
dynamic db = b; //当运行时已经为T类型赋予了int或者double类型
return da + db;
}
dynamic 动态的[当运行时根据传过来的值确定其类型] daɪˈnæ mɪk
38-15-1:多样化泛型
class Program {
static void Main(string[] args)
{
reyy<int, string, double> Fanxing = new reyy<int, string, double>();
Fanxing.LeiXing_1[1] = 500;
Fanxing.LeiXing_2[1] = "ABSD";
Fanxing.LeiXing_3[1] = 63.588;
} }
//多样化泛型类
class reyy<T , U , F>
{
public T[] LeiXing_1 = new T[300];
public U[] LeiXing_2 = new U[300];
public F[] LeiXing_3 = new F[300];
}
38-15-1:泛型的继承-1普通类继承泛型
泛型可以被继承 例如:继承时特化泛型类型
class Program
{
static void Main(string[] args)
{
teacher Teacher = new teacher();//实例化老师对象
Teacher.id = 550346;//老师作为人类的id
}
}
class people<T>
{
//编号属性
public T id { get; set; }
}
class teacher : people<int>
//继承一个泛型父类、继承的同时特化泛型
{
}
38-15-1:泛型的继承-2泛型继承泛型
泛型继承泛型、当子类被实例化时特化的类型也会传导给父类
class Program
{
static void Main(string[] args)
{
teacher<int> Teacher = new teacher<int>();//实例化老师对象
//把子类特化int类型传导给父类T
Teacher.id = 550346;//老师作为人类的id
}
}
class people<T>
{
//编号属性
public T id { get; set; }
}
class teacher<B> : people<B>
{
//当无法确定子类的类型时、可以把子类看做泛型类、
//当子类实例化时、特化的类型B也会传导给父类T
}
38-15-1:总结
