C# 泛型称之为类型参数。泛型要点:
- 在定义方法中,通常是将变量的值作为参数,但其实这个变量的类型本身也可以作为参数。
- 泛型允许在调用的时候再指定这个类型参数是什么。
- 在.net中,泛型能够给我们带来的三个明显好处是:类型安全、代码重用、减少装箱和拆箱操作。
- 通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。
- 可以用任何类型来声明和使用它。
- 使用 ﹤ 和 ﹥ 括号,以便将一般类型参数括起来。
泛型的几个好处实例:
public class 泛型 { //非泛型:类型不安全-编译时不能发现错误 //执行提示:System.InvalidCastException: 指定的转换无效。 public void ShowValues1() { ArrayList list = new ArrayList(); list.Add(44); list.Add("string"); //编译通过 foreach (int i in list) { Console.WriteLine("输出值:" + i); } } //泛型:类型安全-编译时即发现类型不匹配 public void ShowValues2() { List<string> list = new List<string>(); list.Add(44); //--编译出错 list.Add("string"); foreach (string s in list) { Console.WriteLine("输出值:" + s); } } //非泛型:需要显式类型转换,损失性能 public void ShowValues3() { ArrayList list = new ArrayList(); list.Add(44); int i = (int)list[0]; Console.WriteLine("输出值:" + i); } //泛型:使用时类型是确定的,无需进行类型转换 public void ShowValues4() { List<int> list = new List<int>(); list.Add(44); int i = list[0]; Console.WriteLine("输出值:" + i); } }
//自定义一个泛型类 public class MyGeneric<T> { public void ShowValues(T a) { Console.WriteLine("输出值:" + a.ToString()); } } //用不同的类型参数调用自定义泛型 public class Test_MyGeneric { public void Test_int_ShowValues() { MyGeneric<int> fanXing = new MyGeneric<int>(); fanXing.ShowValues(100); } public void Test_string_ShowValues() { MyGeneric<string> fanXing = new MyGeneric<string>(); fanXing.ShowValues("Hello"); } public void Test_doube_ShowValues() { MyGeneric<double> fanXing = new MyGeneric<double>(); fanXing.ShowValues(3.14); } //定义泛型方法:交换两个变量 public void Swap<T>(ref T a, ref T b) { T temp; temp = a; a = b; b = temp; } //交换整数 public void TestSwap1() { int t = 1; int g = 2; Swap(ref t, ref g); Console.WriteLine("输出值t:" + t.ToString()); Console.WriteLine("输出值g:" + g.ToString()); } //交换字符串 public void TestSwap2() { string t = "str1"; string g = "str2"; Swap(ref t, ref g); Console.WriteLine("输出值t:" + t.ToString()); Console.WriteLine("输出值g:" + g.ToString()); } //交换对象 public class usrEntity { public string username { get; set; } public string sex { get; set; } } public void TestSwap3() { usrEntity t = new usrEntity(){ username = "小明", sex = "男" }; usrEntity g = new usrEntity() { username = "小红", sex = "女" }; Swap(ref t, ref g); Console.WriteLine("输出值t:" + t.username + ":" + t.sex); Console.WriteLine("输出值g:" + g.username + ":" + g.sex); } }