泛型
泛型的概念
泛型实现了类型参数化,达到代码复用目的
通过类型参数化来实现同一份代码上操作多种类型
泛型相当于类型占位符
定义类或方法时使用替代符代表变量类型
当真正使用类或方法时再具体指定类型
//泛型类和泛型接口
//基本语法:
//class 类名<泛型占位字母>
//interface 接口名<泛型占位字母>
//泛型函数
//基本语法:
//函数名<泛型占位字母>(参数列表)
//泛型展位字母可以有多个,用逗号分隔开
class TestClass<T>
{
public T value;
}
class TestClass2<T1,T2,K,M,Key>
{
public T1 value1;
public T2 value2;
public K value3;
public M value4;
public Key value5;
}
interface TestInterface<T>
{
T Value
{
get;
set;
}
}
class Test : TestInterface<int>
{
public int Value
{
get;
set;
}
}
TestClass<int> t = new TestClass<int>();
t.value = 10;
Console.WriteLine(t.value);
TestClass<string> t2 = new TestClass<string>();
t2.value = "123";
Console.WriteLine(t2.value);
TestClass2<int,string,float,double,uint> t3 = new TestClass2<int,string,float,double,uint>();
//普通类中的泛型方法
class Test2
{
//作为参数
public void TestFunc<T>(T value)
{
Console.WriteLine(value);
}
//参加逻辑处理
public void TestFunc<T>()
{
T t = default(T);
}
//作为返回值
public T TestFunc<T>(string v)
{
return default(T);
}
//多个泛型占位
public void TestFunc<T,K,M>(T t,K k,M m)
{
}
}
Test2 tt = new Test2();
tt.TestFunc<string>("robot");
//泛型类中的泛型方法
//加了泛型之后类名就不同了所以Test2和Test<T>不同
class Test2<T>
{
public T value;
//这种不是泛型方法
public void TestFunc(T t)
{
}
//这才是泛型方法,而且这里的占位符跟类名里的不能相同
public void TestFunc<K>(K k)
{
}
}
泛型的作用
不同类型的对象的相同逻辑处理可以选择泛型
使用泛型可以一定程度避免装箱拆箱
//优化ArrayList
//避免装箱拆箱
//不过只能装指定一种类型内容
class ArrayList<T>
{
private T[] array;
public void Add(T value)
{
}
public void Remove(T value)
{
}
}
复习
//静态成员方法才能在不实例化对象的情况下直接使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!