泛型是自.NET2.0中的新概念。这个概念在java新版本中也一样受支持。泛型将类型参数的概念引入到.NET Framework中,类型参数可以让开发人员自由设计这样的类和方法。这些类和方法将一个或多个类型的指定推迟到代码声明并实例化该类或方法的时候。
简单地说,泛型用于解决以往采用object通用类型来支持所有类型的不足。采用object类型还需要进行强制转换,且往往会导致数据存储不容控制。而泛型解决了这一问题。
泛型类型参数:类型参数T是定义泛型类的时候的一个点位符,注意:T并不是一种类型,它仅表示某种可能的类型。在使用时,T出现的位置可以使用任何类型来替代。下面看一个很简单的泛型示例代码:
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
namespace Zhnet
{
class Program
{
static void Main()
{
T_Class<CN_Class> Output1 = new T_Class<CN_Class>();
Output1.SayPlay();
T_Class<EN_Class> Output2 = new T_Class<EN_Class>();
Output2.SayPlay();
}
}
///定义一个泛型类
public class T_Class<T>
{
public T_Class()
{
//
}
public void SayPlay()
{
T S = new T();
S.Show();
}
}
///说中文
public class CN_Class
{
public CN_Class()
{
//
}
public void Show()
{
Console.WriteLine("哈哈!");
}
}
///说英文
public class EN_Class
{
public EN_Class
{
//
}
///说英文
public Show()
{
Console.WriteLine("hoho");
}
}
}
以上代码没有调试过,只是说明一下意思。
泛型的限制:C#中进以对泛型参数T进行限制,这样就可以限制实便化泛型类时可能使用到的类型。通过where类键字来限制泛型。如下:
public class MyClass<T> where T : Form
{
........
}
泛型接口:同定义泛型类一样,可以定义泛型接口。方法如下:
interface IMyInterface<T>
{
........
}
其参数可以不止一种,如下:
interface IMyInterface<T, Y>
{
.................
}
泛型接口的使用与泛型类雷同,这里就不多说了。
泛型方法:同样也可以定义泛型方法请看下方法
public string getArrayString<T>(T[] A)
{
string ReturnValue = string.Empty;
foreach(T items in A)
{
ReturnValue += items;
}
return ReturnValue;
}
类的重载:同方法一样,类也可以进行重载。泛型类和普通类形式上的差异就在于,泛型类后紧跟了一个<T>。正是这个T可以使类进行重载。
泛型类和普通类一样,也可以继承。这里就中多说了。
泛型结构:结构体中同样可以应用泛型的思想,C#对它也一样支持看下代码:
struct MyStruct<T>
{
public MyStruct()
{
Console.WriteLine("创建一MyStruct泛型结构");
}
}