1. 程式人生 > 實用技巧 >C#中面向物件程式設計技術(泛型的使用(一))

C#中面向物件程式設計技術(泛型的使用(一))

1,使用泛型儲存不同型別的資料
泛型程式設計是一種程式設計方式,它利用“引數化型別”將型別抽象化,從而實現更靈活的複用。使用泛型儲存不用型別的資料時,首先定義一個泛型類,並在泛型類中定義多個泛型變數,然後使用這些變數記錄不同型別的資料,這樣就可以重複利用泛型變數來儲存不同型別的資料。

泛型是用於演算法處理、資料結構的一中程式設計方法。泛型的目標是採用廣泛適用和可互動性的形式來表示演算法和資料結構,以使它們能夠直接用於軟體構造。泛型類、介面、結構、委託和方法可以根據它們儲存和操作的資料型別來進行引數化。泛型能在編譯時提供強大的型別檢查,減少資料型別之間的顯示轉換、裝箱操作和執行時的型別檢查。泛型類和泛型方法同時具備可重用性、型別安全和效率高等特性,這是非泛型類和非泛型方法無法具備的。

泛型類通常用到集合和在集合上執行的方法中。

宣告泛型類的語法與宣告普通類是類似的,,其語法格式如下:
【型別修飾】class 【類名】<型別引數 T>
{
【類體】
}
泛型類的宣告相比普通類多了一個型別引數T,型別引數T可以看作是一個佔位符,它不是一種型別,它僅代表了某種可能的型別。在定義泛型類時,T出現的位置可以在使用時用任何型別來代替。型別引數T的命名規則如下:
1,使用描述性名稱命名泛型型別引數,除非單個字母名稱安全可以讓人瞭解它表示的含義,而描述姓名稱不會有更多的意義
2,將T作為描述性型別引數名的字首

例子:

class Types<T>
        {
            
public T Name;//宣告姓名欄位 public T Num;//宣告編號子段 public T sex;//宣告性別欄位 } private void button1_Click(object sender, EventArgs e) { Types<object> Exte = new Types<object>();//建立泛型物件 //使用泛型類中宣告的欄位進行賦值,儲存不同型別的值 Exte.Name = "
張三"; Exte.Num = 1; Exte.sex = ""; textBox1.Text = Exte.Num.ToString(); textBox2.Text = Exte.Name.ToString(); textBox3.Text = Exte.sex.ToString(); }

.NET類庫中提供了開發人員常用的一些泛型類,主要有Dictionary<TKey,TValue>、List<T>、Queue<T>、Stack<T>和SortedList<TKey,TValue>等,他們都位於System.Collections.Generic名稱空間中。

2,通過泛型查詢陣列中的值
泛型方法是在宣告中包括了型別引數T的方法。泛型方法可以在類、介面或結構宣告中宣告,這些類、結構或介面本身可以是泛型或非泛型。如果在泛型型別宣告中宣告泛型方法,則方法體可以同時引用該方法的型別引數T和包含該方法宣告的型別引數T。泛型方法的語法格式如下:
【修飾符】【返回值型別】【方法名】<型別引數 T>()
{
【方法體】
}

例子:

            public class Finder {

            public static int Find<T>(T[] items, T item) {//定義一個泛型方法,用來查詢指定值在陣列中的索引

                for (int i = 0; i < items.Length; i++)//遍歷泛型陣列
                {
                    if (items[i].Equals(item))//判斷是否找到了指定值
                    {
                        return i;//返回指定值在陣列中的所以要
                    }
                }
                return -1;//如果沒有找到,返回-1
            }
        }

通常情況下,建議使用泛型集合,因為這樣可以獲得型別安全的直接優點,而不需要從基集合型別派生並實現型別轉換特定的成員。此外,如果集合元素為值型別,泛型集合型別的效能通常優於對應的非泛型集合型別(並優於從非泛型集合型別派生的型別),因為使用泛型時不必對元素進行裝箱。