C#笔记进阶篇08 泛型
——本系列是基于人民邮电出版社《C#2008 C#图解教程》、清华大学出版社《C#入门经典(第五版)》两本书的自学C#笔记,如果您发现了本文的纰漏,还望不吝指正。
写在前边:
泛型允许灵活地创建类型,处理一种或多种特定类型的对象,这些类型是在实例化时确定的,否则就使用泛型类型——清华大学出版社《C#入门经典(第五版)》
使用泛型
- 不定义数据类型,先写逻辑,就可以使用Object类型
- 可以让我们延迟定义数据类型,来编写程序
- C#提供了5种泛型,类、结构、接口、委托和方法
1. 泛型类
常规的非泛型类在创建和使用时包括:声明类和实例化。但是泛型类不是实际的类,而是类的模板,所以我们必须先从它们构建实际的类类型,然后创建这个构建后的类类型的实例。
1.1 声明泛型类
如下代码中,声明一个SomeClass的泛型类,类型参数被列在尖括号中
class SomeClass<T1,T2>
{
public T1 SomeVar = new T1();
public T2 OtherVar = new T2();
}
1.2 创建构造类型
从泛型类构建类类型 :列出类名字并在尖括号中提供真实类型来替代类型参数
SomeClass<short, int> myInst;
1.3 创建变量和实例
例:承接创建构造类型,在栈上为myInst分配一个引用
myInst = new SomeClass<short, int> ();
2. 泛型结构
泛型结构的规则和条件与泛型类是一样的
例:下面代码声明一个泛型结构,Main创建两个构造类型的对象
struct PieneOfData<T>
{
public PieneOfData(T value)
{
_Data = value;
}
private T _Data;
public T Date
{
get {
return _Data; }
set {
_Data = value; }
}
}
class Program
{
static void Main(string[] args)
{
var intData = new PieneOfData<int>(10);
var stringData = new PieneOfData<string>("Hi there.");
Console.WriteLine("intData ={0}",intData.Date);
Console.WriteLine("stringData ={0}",stringData.Date);
}
}
//源码来自 人民邮电出版社《C#2008 C#图解教程》 第19章
控制台输出结果:
intData =10
stringData =Hi there.
3. 泛型接口
3.1 声明泛型接口
需要在接口名称之后的尖括号中有类型参数
interface IMyIfc<T>
{
T ReturnIt(T inValue);
}
3.2 实现泛型接口
例:下面代码声明一个泛型结构,继承自泛型接口IMyIfc,Main实例化泛型的两个对象
class Simple<S> : IMyIfc<S>
{
public S ReturnIt(S inValue)
{
return inValue;
}
}
class Program
{
static void Main(string[