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);
}
}