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

C# 泛型深入學習實例(二):泛型類別成員、介面與委派

     編輯:關於C語言

前言

本文探討泛型類別繼承規則、成員使用型別參數、泛型介面實作與泛型委派應用。

泛型類別繼承規則


class Base { }
class Derived1 : Base { }           // 合法:傳遞型別參數
class Derived2 : Base { }              // 合法:具體化型別參數
class Derived3 : Base { }             // 合法:重新命名參數
// class Derived4 : Base { }               // 非法:未提供型別引數
  • 基類若為泛型,衍生類**必須**提供型別引數(具體化或轉遞)。

泛型類別成員使用型別參數


class Container
{
    public T Field;                    // 欄位
    public List Items;              // 作為其他泛型型別引數
    public Container(T value) => Field = value; // 建構函式
    public T Get() => Field;           // 方法回傳
    public void Set(T value) => Field = value;  // 方法參數
}
  • 若 T **無約束**,成員僅能呼叫 object 定義的成員。
  • 加上 where T : IComparable 後,即可呼叫 CompareTo 等介面方法。

泛型介面實作


interface IList { T[] GetElements(); }
interface IDictionary { void Add(K key, V value); }

class MyList : IList, IDictionary
{
    public T[] GetElements() => null;          // 實作 IList
    public void Add(int key, T value) { }      // 實作 IDictionary
}
  • 實作類別的型別參數**必須滿足**介面約束(若有)。
  • 介面型別參數來源:具體化(如 int)或來自實作類別的參數(如 T)。

泛型委派應用


delegate bool Predicate(T value);

class Demo
{
    static bool IsEven(int i) => i % 2 == 0;
    static bool StartsWithA(string s) => s.StartsWith("A");

    static void Main()
    {
        Predicate p1 = IsEven;
        Predicate p2 = StartsWithA;
        // Lambda 簡寫
        Predicate p3 = d => d > 0;
    }
}
  • 委派支援**回傳值**、**參數**使用型別參數。
  • 委派型別參數**同樣可附加約束**(delegate TResult Func() where T : new())。

結語

泛型類別、介面、委派構成 C# 型別系統的三大支柱。掌握繼承規則、成員約束與實作模式,能設計出高度可復用的元件庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved