首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 語法學習:泛型 Generic 進階應用 (3) — 多型別參數與效能優勢

     編輯:關於C語言

單型別參數泛型 Stack<T>


using System;
class Stack {
    private T[] items;
    private int count;
    public Stack(int size) { items = new T[size]; count = 0; }
    public void Push(T x) { items[count++] = x; }
    public T Pop() { return items[--count]; }
}
class Test {
    static void Main() {
        Stack s = new Stack(10);
        s.Push(111); s.Push(222);
        Console.WriteLine(s.Pop() + s.Pop()); // 333
    }
}
  • 避免裝箱/拆箱,效能大幅提升 (值型別不轉為 object)。
  • 型別安全:編譯期阻止錯誤型別推入。
  • 程式碼復用:同一邏輯支援 int、double、string 等任意型別。

雙型別參數泛型 Stu<T, S>


using System;
public class Stu {
    private T name;
    private S age;
    public Stu(T Name, S Age) { name = Name; age = Age; }
    public void Show() { Console.WriteLine("姓名:{0}, 年齡:{1}", name, age); }
}
class Test {
    static void Main() {
        Stu t = new Stu("Athrun", 26);
        t.Show(); // 姓名:Athrun, 年齡:26
    }
}
  • 慣用 <T, S>、<TKey, TValue> 命名。
  • 可擴充至多型別參數 (如 Tuple<T1, T2, T3>)。

泛型限制條件


class Repository where T : class, new() { ... } // 必須為參考型別且有無參建構函式
class Calculator where T : struct { ... }      // 必須為實值型別
class Service where T : IComparable { ... } // 必須實作介面
class Factory where T : BaseClass { ... }      // 必須繼承基底類別

實務建議

  1. 集合類別優先使用 List<T>、Dictionary<TKey, TValue> 等泛型版本。
  2. 自訂演算法/資料結構盡量泛型化,提升復用與型別安全。
  3. 避免過度泛型導致程式碼膨脹 (Code Bloat),但在 .NET 運行時共享參考型別實作,實值型別各自實例化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved