程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 自定義一個能接收不同數據類型的鏈表,自定義數據類型

自定義一個能接收不同數據類型的鏈表,自定義數據類型

編輯:C#入門知識

自定義一個能接收不同數據類型的鏈表,自定義數據類型


在C#中,面對鏈表的場景可使用LinkedListLinkedList可以被看作是一個集合,集合元素的類型為LinkedListNode ,與其他集合元素不同的是:LinkedListNode不僅存儲本身的值,還包含對上一個節點、下一個節點的引用。反編譯LinkedListNode可以看到大致如下:

 

public sealed class LinkedListNode<T>{
    internal T item;
    internal LinkedListNode<T> next;
    internal LinkedListNode<T> prev;
    ......
}

 

使用LinkedList如下:

 

        static void Main(string[] args)
        {
            LinkedList<string> strs = new LinkedList<string>();
            strs.AddFirst("b");
            strs.AddFirst("a");
            foreach (var item in strs)
            {
                Console.Write(item + " ");
            }
            Console.ReadKey();
        }

 

以上,LinkedList中每個LinkedListNode節點的數據類型都是LinkedListNode ,可是,如果作為鏈表節點的LinkedListNode數據類型不一樣,怎麼辦呢?

 

我們來自定義一個鏈表的節點,使之能接收不同類型的數據。在自定義鏈表節點中,每個節點的數據類型可能是不一樣的,但在該鏈表節點中有關指向下一個鏈表節點的屬性類型是一樣的,可以先提煉出一個鏈表節點基類:

 

    public class Node
    {
        protected Node _next;
        public Node(Node next)
        {
            _next = next;
        }
    }

 

代表鏈表節點的泛型類實現該基類。

 

    public class MyNode<T> : Node
    {
        public T _data;
        public MyNode(T data, Node next) : base(next)
        {
            _data = data;
        }
        public MyNode(T data) : this(data, null)
        {
            
        }
        public override string ToString()
        {
            return _data.ToString() + " " + ((_next != null) ? _next.ToString() : "");
        }
    }    


在客戶端這樣調用:

 

        static void Main(string[] args)
        {
            Node node = new MyNode<DateTime>(DateTime.Now);
            node = new MyNode<string>("現在的時間是", node);
            Console.WriteLine(node.ToString());
            Console.ReadKey();
        }


總結:泛型類也是類,可以派生與某個具體類。以上,借助MyNode實現接收不同數據類型,通過 MyNode的父類Node實現對下一個節點引用的抽象。        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved