C#基础入门 八
泛型
- C#中的泛型能够将类型作为参数来传递,即在创建类型时用一个特定的符号,如“T”来作为一个占位符,代替实际的类型,等待实例化时用一个实际的类型来代替。
public class Test<T>
{
public void Swap(T a,T b)
{
}
}
- 使用泛型类型可以最大限度的重用代码、保护类型的安全以及提高性能
- 降低了强制转换或装箱操作的成本或风险、可以对泛型进行约束以访问特定数据类型的方法
- 实例化:
Test<int> test1 = new Test<int>();
- 注意:类型参数并不是只有一个,可以有多个,类型参数可以是编译器识别的任何类型,类型参数的名字不能随便起,不能重名。
public class Test<T,U>
{
public void Swap(T a, U b)
{
}
}
class MainClass
{
public static void Main(string[] args)
{
Test<int,double> test1 = new Test<int,double>();
test1.Swap(1, 2.33);
}
}
public class Test<T>where T:struct
代表类型参数T只能是值类型。public class Test<T>where T:class
代表类型参数T只能是引用类型。
泛型类和泛型方法
- 泛型类封装不是特定于具体数据类型的操作,泛型类最常用语集合,像从集合中添加和移除项这样的操作都以大体上相同的方式执行,与所存储数据的类型无关。
- 创建泛型类的过程:从一个现有的具体类开始,逐一将每个类型更改为类型参数,直至达到通用化和可用性的最佳平衡。
class BaseNode
{
int a;int b;
}
class BaseNodeGeneric<T>
{
T a;T b;
}
public class Person
{
public string name;
public int age;
public char sex;
public string Print(string c){
return c;
}
}
下一步:
public class Person<S,I,C>
{
public S name;
public I age;
public C sex;
public S Print(S c){
return c;
}
}
class MainClass
{
public static void Main(string[] args)
{
Person<string, int, char> person = new Person<string, int, char>();
Console.WriteLine(person.Print("zxh"));
}
}