十二随风 ※ 雪舞涟漪
程序员是男人,语言是女人。每个男人都想有很多女人,但不是每个男人都了解一个女人。
为了提高应用程序的效率和可用性,C#2.0引入了泛型概念.C#泛型有些类似C++的摸版。
(一)特点  
      泛型具有以下功能特点:
     一、使用泛型可以定义类型安全的数据结构,而无需使用实际的数据类型。
     二、通过使用泛型,能够将数据类型参数化,以此完成代码重用的目标。这一参数可以应用在类、方法、结构、接口、委托等设计中。
     三、泛型可提供编译期间的类型检查,减少不必要的显式类型转换,减少不必要的装箱操作,从而提高应用程序的运行效率。
(二)泛型集合
      泛型常用于集合应用中。在.NET2.0框架的类库中,提供了一个新的命名空间System.Collections.Generic,其中包含了一些新的基于泛型的容器类,例如:System.Collections.Generic.StackSystem.Collections.Generic.Dictionary、System.Collections.Generic.List、System.Collections.Generic.Queue等,这些类库可以在集合中实现泛型。
      下面是一个Stack类具体的应用代码:
        //实列化Stack类
        System.Collections.Generic.Stack<string> stringStack=new System.Collections.Generic.Stack<string>();
        
//添加数据
        stringStack.Push("常德");
        stringStack.Push(
"北京");
        stringStack.Push(
"武汉");
        
//转换为数组
        Array stringArray;
        stringArray
=stringStack.ToArray();
        
//显示数组
        foreach(string s in stringArray)
        
{
            Response.Write(s);
        }
      以上代码中,首先实例化了一个Stack类的stringStack,并且设置其参数是string,这说明该类所实现堆栈的数据类型是string。然后,通过Stack类的Push方法压入3个字符串数据,并且使用ToArray方法,将堆栈中的数据转换到一个数组stringArray中(此时,stringArray是一个字符串数组)。最后,使用Response.Write( )方法将数组中的数据显示出来(逆序显示,这是堆栈的特性)。
      另外,如果要求堆栈中存储的是int类型,那么可以使用同样的方法,只需要修改很少的内容即可实现。 
(三)泛型方法 
      在某些情况下,一个类型参数并不为整个类所必需,而只用于一个特定的方法中。这个情况竟法发上在建立一个需要泛型作为参数的方法时。
      一个泛型方法有一个或多个类型参数,并且在方法名后面由“<”和“>”限定符指定。这个类型参数可以用在参数利表、返回值和方法体中。
    public void StackPush<T>(Stack<T> stack, params T[] values)
    
{
        
foreach (T value in values)
        
{
            stack.Push(value);
        }

    }
      使用这个方法,可以将多个元素压入任何Stack<T>中。当调用一个泛型方法时,要在函数的调用中将类型参数放入尖括号中。示例代码如下:

        Stack
<int> stack = new Stack<int>();
        StackPush
<int>(stack, 1234);
      在上面的例子中,由于第一个正式参数类型是Stack<int>,并且后面的参数类型都是int,编译器可以推断类型参数一定是int,因此在调用泛型的StackPush方法时可以不用提供类型参数。

        Stack
<int> stack = new Stack<int>();
        StackPush(stack, 
1234);
posted on 2007-01-31 11:21  十二随风  阅读(429)  评论(0编辑  收藏  举报