泛型
C# 中的泛型是一种强大的编程特性,它允许你编写类型安全且灵活的代码。泛型允许你定义类、结构体、接口、方法和委托,而不必在编译时指定具体的数据类型。相反,你可以使用类型参数来定义泛型类型或方法,然后在使用时指定具体的类型。
接下来通过几个简单的泛型例子初步了解泛型。
泛型方法
泛型用 T 指代那些未知类型,并且需要用<T>来定义泛型,和指定泛型类型。
T 可以看作为一种数据类型,并且这个数据类型是任意的。
<T> 在方法名后面,说明这个泛型方法。
dynamic 是一种特殊类型,会在运行中解析,这使得你可以调用方法和访问属性,而不需要知道对象的确切类型。
static void Main(string[] args){T Add<T>(T num1, T num2){dynamic numTmp1 = num1;dynamic numTmp2 = num2;return numTmp1 + numTmp2;}int result = Add(5, 8);//string result = Add("5", "8");//string result = Add("Rain", "Bow");Console.WriteLine("result = " + result);Console.ReadKey();}
泛型类
通过泛型类,可以快速完成不同类的创建属性和定义方法。下列就是关于int类型和string类型的数组创建以及根据关键字查找数据。
class MyArray<T>{T[] arrData = new T[10];public void Set(T value, int index){arrData[index] = value;}public T GetDataByIndex(int index){return arrData[index];}}
static void Main(string[] args){MyArray<int> myArr = new MyArray<int>();myArr.Set(5, 0);myArr.Set(6, 1);myArr.Set(7, 2);myArr.Set(8, 3);myArr.Set(9, 4);int value = myArr.GetDataByIndex(3);Console.WriteLine(value);MyArray<string> myArrStr = new MyArray<string>();myArrStr.Set("张三", 0);myArrStr.Set("李四", 1);myArrStr.Set("王五", 2);myArrStr.Set("赵六", 3);myArrStr.Set("钱七", 4);string valueStr = myArrStr.GetDataByIndex(3);Console.WriteLine(valueStr);}
泛型约束
类
public class 泛型名<T> where T : 类名 // T 必须是引用类型
{// 类定义
}public class 泛型名<T> where T : 结构体名// T 必须是值类型
{// 类定义
}
方法
public T 泛型名<T>() where T : 类名 // 使用where约束T的类型
{// 方法语句return null; //return 为空时直接输出return 数据名 as T; //return 不为空时,需要强转为T类型
}
关于泛型就介绍到此,泛型的运用场景非常多,这里就不举例了。