程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 通過代碼學習C#&.NET——委托使用(通用類設計)

通過代碼學習C#&.NET——委托使用(通用類設計)

編輯:C#入門知識

代碼編寫及運行環境Visual Studio 2010 .NET v4.0.30319

 using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
 
namespace DelegateUseInCommonClass 

    /// <summary> 
    /// 一般通用類的設計都包含一些標准的任務代碼,這些代碼包含任務如何執行的邏輯,但是有的時候這些任務包含一些 
    /// 子任務,只有具體使用通用類的對象才知道如何執行這些子任務,比如說: 
    /// 建立了一個給對象排序的通用類,在使用的時候需要知道具體的排序規則才能順利完成排序,比如int對象是比較大小, 
    /// string對象是比較第一個字母,一些復雜對象可能是比較其中的某個屬性值完成排序。 
    /// 這種情況可以通過委托實現,對於子任務使用委托,可以方便通用類的使用者具體執行執行子任務的方式。 
    /// </summary> 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            //定義並初始化不同類型的三個數組 
            int[] intItems = { 12, 2, 4, 5, 78, 32, 12, 65 }; 
            string[] stringItems = { "test", "best", "active", "card", "book" }; 
            Person[] personItems = { new Person(12, "Mark"), new Person(45, "Mary"), new Person(32, "Oscar"), new Person(80, "Kele"),new Person(12,"Ada") }; 
 
 
            #region Int類型的排序             
             
            Console.WriteLine("intItems排序前:"); 
            Console.Write("  "); 
            foreach (int i in intItems) 
            { 
                Console.Write(string.Format("{0,-4}", i)); 
            } 
            Console.WriteLine(); 
            //給intItems排序 
            CommonClass.Sort<int>(intItems, (item1, item2) =>  
                {  
                    if (item1 > item2) 
                        return true; 
                    else  
                        return false; 
                }); 
            Console.WriteLine("intItems按Int值從小到大排序後:"); 
            Console.Write("  "); 
            foreach (int i in intItems) 
            { 
                Console.Write(string.Format("{0,-4}", i)); 
            } 
            Console.WriteLine(); 
 
            #endregion 
 
            #region String類型的排序 
            Console.WriteLine("stringItems排序前:"); 
            Console.Write("  "); 
            foreach (string str in stringItems) 
            { 
                Console.Write(string.Format("{0,-10}", str)); 
            } 
            Console.WriteLine(); 
            //給stringItems排序 
            CommonClass.Sort<string>(stringItems, (item1, item2) =>  
                { 
                if (item1.CompareTo(item2) > 0) 
                    return true;  
                else 
                    return false;  
                }); 
            Console.WriteLine("stringItems按string首字母排序後:"); 
            Console.Write("  "); 
            foreach (string str in stringItems) 
            { 
                Console.Write(string.Format("{0,-10}",str)); 
            } 
            Console.WriteLine(); 
 
            #endregion 
 
            #region Person類型的排序             
             
            Console.WriteLine("personItems排序前:");             
            foreach (Person per in personItems) 
            { 
                Console.WriteLine(string.Format("  Person:  Name-{0,-10}Age-{1}",per.Name,per.Age)); 
            }             
            CommonClass.Sort<Person>(personItems, (item1, item2) => 
                { 
                    if (item1.Age > item2.Age) 
                        return true; 
                    else 
                        return false; 
                }); 
            Console.WriteLine("personItems按年齡從小到大排序後:"); 
            foreach (Person per in personItems) 
            { 
                Console.WriteLine(string.Format("  Person:  Name-{0,-10}Age-{1}", per.Name, per.Age)); 
            } 
            CommonClass.Sort<Person>(personItems, (item1, item2) => 
                { 
                    if (item1.Name.CompareTo(item2.Name)>0) 
                        return true; 
                    else 
                        return false; 
                }); 
            Console.WriteLine("personItems按姓名首字母排序後:"); 
            foreach (Person per in personItems) 
            { 
                Console.WriteLine(string.Format("  Person:  Name-{0,-10}Age-{1}", per.Name, per.Age)); 
            } 
 
            #endregion 
        } 
 
        //定義Person類 
        class Person 
        { 
            private int _Age; 
            private string _Name; 
 
            public int Age 
            { 
                get 
                { 
                    return _Age; 
                } 
                set 
                { 
                    _Age = value; 
                } 
            } 
            public string Name 
            { 
                get 
                { 
                    return _Name; 
                } 
                set 
                { 
                    _Name = value; 
                } 
            } 
 
            public Person(int age, string name) 
            { 
                _Age = age; 
                _Name = name; 
            } 
        } 
    } 
 
    #region 比較通用類設計 
    /// <summary> 
    /// 此處使用排序來說明委托在通用類中的使用,此方法在多本C#說中都有介紹,包括: 
    /// 《C#本質論》 
    /// 《C#高級編程》 
    /// </summary> 
    class CommonClass 
    { 
        //定義用於比較兩個對象並返回bool類型的委托類型 
        public delegate bool Compare<T>(T item1, T item2); 
 
        //通用排序方法,可以用於比較任何對象,具體比較結果依賴於子任務Compare<T>類型的compare 
        public static void Sort<T>(T[] items, Compare<T> compare) 
        { 
            for (int i = 0; i < items.Count()-1; i++) 
            { 
                for (int j = i; j < items.Count(); j++) 
                { 
                    if (compare(items[i], items[j])) 
                    { 
                        T temp = items[i]; 
                        items[i] = items[j]; 
                        items[j] = temp; 
                    } 
                } 
            } 
        } 
    } 
    #endregion 

運行結果:

 \

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