最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#泛型用法實例分析

 更新時間:2015年06月28日 09:46:47   作者:pythoner  
這篇文章主要介紹了C#泛型用法,實例分析了C#泛型的功能、定義與使用技巧,需要的朋友可以參考下

本文實例分析了C#泛型用法。分享給大家供大家參考。具體分析如下:

這里演示如何創(chuàng)建具有單個類型參數(shù)的自定義泛型列表類,以及如何實現(xiàn) IEnumerable<T> 以便對列表的內(nèi)容啟用 foreach 迭代。此示例還演示客戶端代碼如何通過指定類型參數(shù)來創(chuàng)建該類的實例,以及該類型參數(shù)的約束如何實現(xiàn)對類型參數(shù)執(zhí)行其他操作。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Generics_CSharp
{
  // 尖括號中的類型參數(shù) T。
  public class MyList<T> : IEnumerable<T>
  {
    protected Node head;
    protected Node current = null;
    // 嵌套類型也是 T 上的泛型
    protected class Node
    {
      public Node next;
      // T 作為私有成員數(shù)據(jù)類型。
      private T data;
      // 在非泛型構(gòu)造函數(shù)中使用的 T。
      public Node(T t)
      {
        next = null;
        data = t;
      }
      public Node Next
      {
        get { return next; }
        set { next = value; }
      }
      // T 作為屬性的返回類型。
      public T Data
      {
        get { return data; }
        set { data = value; }
      }
    }
    public MyList()
    {
      head = null;
    }
    // T 作為方法參數(shù)類型。
    public void AddHead(T t)
    {
      Node n = new Node(t);
      n.Next = head;
      head = n;
    }
    // 實現(xiàn) GetEnumerator 以返回 IEnumerator<T>,從而啟用列表的
    // foreach 迭代。請注意,在 C# 2.0 中, 
    // 不需要實現(xiàn) Current 和 MoveNext。
    // 編譯器將創(chuàng)建實現(xiàn) IEnumerator<T> 的類。
    public IEnumerator<T> GetEnumerator()
    {
      Node current = head;
      while (current != null)
      {
        yield return current.Data;
        current = current.Next;
      }
    }
    // 必須實現(xiàn)此方法,因為
    // IEnumerable<T> 繼承 IEnumerable
    IEnumerator IEnumerable.GetEnumerator()
    {
      return GetEnumerator();
    }
  }
  public class SortedList<T> : MyList<T> where T : IComparable<T>
  {
    // 一個未優(yōu)化的簡單排序算法,
    // 該算法從低到高對列表元素排序:
    public void BubbleSort()
    {
      if (null == head || null == head.Next)
        return;
      bool swapped;
      do
      {
        Node previous = null;
        Node current = head;
        swapped = false;
        while (current.next != null)
        {
          // 由于需要調(diào)用此方法,因此,SortedList
          // 類在 IEnumerable<T> 上是受約束的
          if (current.Data.CompareTo(current.next.Data) > 0)
          {
            Node tmp = current.next;
            current.next = current.next.next;
            tmp.next = current;
            if (previous == null)
            {
              head = tmp;
            }
            else
            {
              previous.next = tmp;
            }
            previous = tmp;
            swapped = true;
          }
          else
          {
            previous = current;
            current = current.next;
          }
        }// end while
      } while (swapped);
    }
  }
  // 一個將自身作為類型參數(shù)來實現(xiàn) IComparable<T> 的簡單類,
  // 是對象中的
  // 常用設(shè)計模式,這些對象
  // 存儲在泛型列表中。
  public class Person : IComparable<Person>
  {
    string name;
    int age;
    public Person(string s, int i)
    {
      name = s;
      age = i;
    }
    // 這會使列表元素
    // 按 age 值排序。
    public int CompareTo(Person p)
    {
      return age - p.age;
    }
    public override string ToString()
    {
      return name + ":" + age;
    }
    // 必須實現(xiàn) Equals。
    public bool Equals(Person p)
    {
      return (this.age == p.age);
    }
  }
  class Generics
  {
    static void Main(string[] args)
    {
      // 聲明并實例化一個新的范型 SortedList 類。
      // Person 是類型參數(shù)。
      SortedList<Person> list = new SortedList<Person>();
      // 創(chuàng)建 name 和 age 值以初始化 Person 對象。
      string[] names = new string[] { "Franscoise", "Bill", "Li", "Sandra", "Gunnar", "Alok", "Hiroyuki", "Maria", "Alessandro", "Raul" };
      int[] ages = new int[] { 45, 19, 28, 23, 18, 9, 108, 72, 30, 35 };
      // 填充列表。
      for (int x = 0; x < names.Length; x++)
      {
        list.AddHead(new Person(names[x], ages[x]));
      }
      Console.WriteLine("Unsorted List:");
      // 打印出未排序的列表。
      foreach (Person p in list)
      {
        Console.WriteLine(p.ToString());
      }
      // 對列表進行排序。
      list.BubbleSort();
      Console.WriteLine(String.Format("{0}Sorted List:", Environment.NewLine));
      // 打印出排序的列表。
      foreach (Person p in list)
      {
        Console.WriteLine(p.ToString());
      }
      Console.WriteLine("Done");
    }
  }
}

希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • C#監(jiān)測IPv4v6網(wǎng)速及流量的實例代碼

    C#監(jiān)測IPv4v6網(wǎng)速及流量的實例代碼

    這篇文章主要介紹了C#監(jiān)測IPv4v6網(wǎng)速及流量的實例代碼,文中講解非常細致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C# Winform選項卡集成窗體詳解

    C# Winform選項卡集成窗體詳解

    這篇文章主要為大家詳細介紹了C# Winform選項卡集成窗體詳解的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C#中的委托和事件

    C#中的委托和事件

    這篇文章介紹了C#中的委托和事件,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#實現(xiàn)清空回收站的方法

    C#實現(xiàn)清空回收站的方法

    這篇文章主要介紹了C#實現(xiàn)清空回收站的方法,涉及C#系統(tǒng)回收站的清空技巧,非常簡單實用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • WinForm特效之桌面上的遮罩層實現(xiàn)方法

    WinForm特效之桌面上的遮罩層實現(xiàn)方法

    這篇文章主要介紹了WinForm特效之桌面上的遮罩層實現(xiàn)方法,是一個非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • Unity Shader實現(xiàn)素描效果

    Unity Shader實現(xiàn)素描效果

    這篇文章主要為大家詳細介紹了Unity Shader實現(xiàn)素描效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#多線程處理多個隊列數(shù)據(jù)的方法

    C#多線程處理多個隊列數(shù)據(jù)的方法

    這篇文章主要介紹了C#多線程處理多個隊列數(shù)據(jù)的方法,涉及C#線程與隊列的相關(guān)操作技巧,需要的朋友可以參考下
    2015-07-07
  • word ppt excel文檔轉(zhuǎn)換成pdf的C#實現(xiàn)代碼

    word ppt excel文檔轉(zhuǎn)換成pdf的C#實現(xiàn)代碼

    這篇文章主要介紹了word ppt excel文檔轉(zhuǎn)換成pdf的C#實現(xiàn)代碼,有需要的朋友可以參考一下
    2014-01-01
  • C#中事件處理的個人體會

    C#中事件處理的個人體會

    C#中事件處理的個人體會...
    2006-12-12
  • 如何使用正則表達式判斷郵箱(以C#為例)

    如何使用正則表達式判斷郵箱(以C#為例)

    在C#中可以使用Regex正則表達式類來校驗前臺提交過來的郵箱字段信息是否符合要求,Regex類是C#中有關(guān)正則表達式處理的相關(guān)類,功能強大,下面這篇文章主要給大家介紹了關(guān)于如何使用正則表達式判斷郵箱的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論

赣榆县| 安岳县| 五家渠市| 丹巴县| 青海省| 体育| 外汇| 拜泉县| 宿松县| 和硕县| 科技| 灵川县| 教育| 廉江市| 博兴县| 新巴尔虎右旗| 肇东市| 辽宁省| 绵阳市| 方正县| 岳阳市| 扎鲁特旗| 涪陵区| 五台县| 镇江市| 都昌县| 白沙| 山东省| 弥渡县| 磐石市| 黄山市| 团风县| 潞西市| 汶川县| 电白县| 连江县| 沭阳县| 连云港市| 望都县| 八宿县| 绥宁县|