泛型介绍

泛型类和泛型方法同时具备可重用性类型安全效率,这是非泛型类和非泛型方法无法具备的
泛型通常用在集合在集合上运行的方法中.      
。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic,其中包含几个新的基于泛型的集合类。建议面向 2.0 版的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类,如 ArrayList

当然,也可以创建自定义泛型类型和方法,以提供自己的通用解决方案,设计类型安全的高效模式。下面的代码示例演示一个用于演示用途的简单泛型链接列表类。(大多数情况下,建议使用 .NET Framework 类库提供的 List<T> 类,而不要自行创建类。)在通常使用具体类型来指示列表中所存储项的类型时,可使用类型参数 T。其使用方法如下:

  • AddHead 方法中作为方法参数的类型。

  • Node 嵌套类中作为公共方法 GetNextData 属性的返回类型。

  • 在嵌套类中作为私有成员数据的类型。

注意,T 可用于 Node 嵌套类。如果使用具体类型实例化 GenericList<T>(例如,作为 GenericList<int>),则所有的 T 都将被替换为 int。

// type parameter T in angle brackets
public class GenericList<T> 
{
    
// The nested class is also generic on T
    private class Node
    
{
        
// T used in non-generic constructor
        public Node(T t)
        
{
            next 
= null;
            data 
= t;
        }


        
private Node next;
        
public Node Next
        
{
            
get return next; }
            
set { next = value; }
        }

        
        
// T as private member data type
        private T data;

        
// T as return type of property
        public T Data  
        
{
            
get return data; }
            
set { data = value; }
        }

    }


    
private Node head;
    
    
// constructor
    public GenericList() 
    
{
        head 
= null;
    }


    
// T as method parameter type:
    public void AddHead(T t) 
    
{
        Node n 
= new Node(t);
        n.Next 
= head;
        head 
= n;
    }


    
public IEnumerator<T> GetEnumerator()
    
{
        Node current 
= head;

        
while (current != null)
        
{
            yield 
return current.Data;
            current 
= current.Next;
        }

    }

}

下面的代码示例演示客户端代码如何使用泛型 GenericList<T> 类来创建整数列表。只需更改类型参数,即可方便地修改下面的代码示例,创建字符串或任何其他自定义类型的列表:

class TestGenericList
{
    
static void Main()
    
{
        
// int is the type argument
        GenericList<int> list = new GenericList<int>();

        
for (int x = 0; x < 10; x++)
        
{
            list.AddHead(x);
        }


        
foreach (int i in list)
        
{
            System.Console.Write(i 
+ " ");
        }

        System.Console.WriteLine(
"\nDone");
    }

}




 

posted on 2007-11-12 15:14  simhare  阅读(224)  评论(0)    收藏  举报

导航