用来解决成员膨胀和类型膨胀。
一句话:就是限定类型。
声明的时候泛化:给个符号代替,和数学里面的x一样 使用的时候具化:使用的时候就要指定具体类型了,数学里x不会是英文的x,x代表的是一个具体的数,可能是1,可能是π
泛型类
泛型接口一样的通过实现类传泛型参数
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
//在实例化的时候,我想给盒子装一本书,这时候我知道类型了,类型是Book。
//用Book来替代我假设的泛型参数T
Box<Book> box = new Box<Book>(new Book());
//我想装一个苹果,类型是苹果
Box<Apple> box2 = new Box<Apple>(new Apple());
}
class Book
{
public string Name { get; set; }
}
class Apple
{
public string Name { get; set; }
}
class Pen
{
public string Name { get; set; }
}
//一个泛型类,T只是个参数,泛指,在写的这个代码的时候我也不到是个啥类型
class Box<T>
{
public T Goods { get; set; }
public Box(T t)
{
this.Goods = t;
}
}
}
}
泛型方法
class Program
{
static void Main(string[] args)
{
//调用泛型方法会自动识别类型,可以不用写尖括号
int i = Run(123, "字符串");
}
static T Run<T, S>(T t, S s)
{
//进行一系列操作后
//。。。。。。
return t;
}
}
泛型委托
class Program
{
static void Main(string[] args)
{
//限定了这个传入这个委托的方法的参数只能是2个,一个string,一个int
Action<string, int> action = RRR;
action.Invoke("第一个参数", 2)
//最后一个参数返回值类型
Func<int, decimal,int> func = Run;
}
static void RRR(string name,int a)
{
Console.WriteLine("哈哈哈");
}
static T Run<T, S>(T t, S s)
{
//进行一系列操作后
//。。。。。。
return t;
}
}