c# 泛型
介绍:
我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。
泛型通过参数化类型来实现在同一份代码上操作多种数据类型。例如使用泛型的类型参数T,定义一个类Stack<T>,可以用Stack<int>、Stack<string>或Stack<Person>实例化它,从而使类Stack可以处理int、string、Person类型数据。这样可以避免运行时类型转换或封箱操作的代价和风险,类似C++的模板。泛型提醒的是将具体的东西模糊化,这与后面的反射正好相反。
定义:
泛型用用一个通过的数据类型T来代替object,在类实例化时指定T的类型,运行时(Runtime)自动编译为本地代码(我的理解是自动编译为对应类型的代码),运行效率和代码质量都有很大提高,并且保证数据类型安全。
泛型方法:
泛型方法是使用类型参数声明的方法
int a = find<int>(new int[]{ 3,4,5,6},6);
public static int find<T>(T[] value, T val) {
for (int i = 0; i < value.Length; i++) {
if (value[i].Equals(val)) return i;
}
return -1;
}
例子:
gwyy<int> a = new gwyy<int>(2);
a.Push(33);
a.Push(44);
a.show();
gwyy<string> b = new gwyy<string>(2);
b.Push("aaa");
b.Push("bbb");
b.show();
class gwyy <T> {
private T[] s ;
int pos = 0;
public gwyy(int size) {
s = new T[size];
}
public void Push(T val) {
s[pos] = val;
pos++;
}
public T pop() {
pos--;
return s[pos];
}
public void show() {
foreach (T i in s) {
Console.WriteLine(i);
}
}
} //gwyy end

浙公网安备 33010602011771号