首页 > 编程 > C# > 正文

C#泛型类与泛型方法的使用

2023-05-17 11:41:54
字体:
来源:转载
供稿:网友

泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用在集合和在集合上运行的方法中。.NET Framework 2.0 版类库提供一个新的命名空间 System.Collections.Generic,其中包含几个新的基于泛型的集合类。

下面的代码示例演示一个用于演示用途的简单泛型链接列表类。(大多数情况下,建议使用 .NET Framework 类库提供的 List<T> 类,而不要自行创建类。)在通常使用具体类型来指示列表中所存储项的类型时,可使用类型参数 T。其使用方法如下:

(1)在 AddHead 方法中作为方法参数的类型。

(2)在 Node 嵌套类中作为公共方法 GetNext 和 Data 属性的返回类型。

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

注意,T 可用于 Node 嵌套类。如果使用具体类型实例化 GenericList(例如,作为 GenericList),则所有的 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 类来创建整数列表。只需更改类型参数,即可方便地修改下面的代码示例,创建字符串或任何其他自定义类型的列表:

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");
    }
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表