C#泛型参数化了类型,把类型作为参数抽象出来,从而使我们在实际的运用当中能够更好的实现代码的重复利用,同时它提供了更强的类型安全,更高的效率,不过在约束方面,它只支持显示的约束,这样在灵活性方面就显得不是那么好了。我觉得它之所以能够提供更高的效率是因为泛型在实例化的时候采用了"on-demand"的模式,即按需实例化,发生在JIT(Just In Time)编译时。
下面来看如何定义一个C#泛型类,很简单,你只需要意识到一点,在这里,类型已经被参数化了:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace GenericTest
- {
- class Program
- {
- static void Main(string[] args)
- {
- //使用string,int来实例化Test< T,S>类
- Test< string, int> t = new Test< string, int>("SHY520",22);
- //调用泛型类中的方法
- t.SetValue();
- }
- }
- /**//// < summary>
- /// 定义一个泛型类,该类有两个类型参数,分别是T,S
- /// http://pw.cnblogs.com
- /// < /summary>
- /// < typeparam name="T">类型参数< /typeparam>
- /// < typeparam name="S">类型参数< /typeparam>
- public class Test< T,S>
- {
- //泛型类的类型参数可用于类成员
- private T name;
- private S age;
- public Test(T Name,S Age)
- {
- this.name = Name;
- this.age = Age;
- }
- public void SetValue()
- {
- Console.WriteLine(name.ToString());
- Console.WriteLine(age.ToString());
- }
- }
- }
上面的例子不是很恰当,目的是让初学泛型的你了解一下泛型的定义及实例化方法,如上,我们定义了一个泛型类,那么如何实现C#泛型类的继承呢?这里需要满足下面两点中的任何一点即可:
1、泛型类继承中,父类的类型参数已被实例化,这种情况下子类不一定必须是泛型类;
2、父类的类型参数没有被实例化,但来源于子类,也就是说父类和子类都是泛型类,并且二者有相同的类型参数;