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

C# 動靜結合編程(四):泛型委託——融合型別安全與靈活多型的利器

     編輯:關於C#

多型本質:介面與實現的 1:N 映射

多型讓程式透過統一介面調用不同實現,增強表達力與靈活性。最熟悉的形式是 型別多型(含介面繼承):

var animals = new List
{
    new Cat("Missy"),
    new Cat("Mr. Bojangles"),
    new Dog("Lassie")
};
foreach (var a in animals)
    Console.WriteLine($"{a.Name}: {a.Talk()}");

繼承 ≠ 多型:釐清兩大功能

C# 繼承雙重功能:

  1. 復用:派生類別繼承基類非私有成員 —— 同一抽象層次
  2. 被復用(多型):派生類以基類/介面名義被調用 —— 抽象與具體關係

「父子關係」強調復用(兒子似父親);「動物-狗關係」強調被復用(抽象與具體)。濫用繼承做復用 會帶來靜態約束副作用(物件生命週期無法改變繼承關係),建議:復用首選組合,多型才用繼承/介面。

委託 = 方法多型,泛型 = 參數化多型

  • 委託:調用者透過統一簽名調用不同方法,消除型別約束,比繼承更靈活
  • 泛型:編寫者用型別參數 T 表達行為,具體化交給使用者

泛型委託:最強多型融合

Func、Action、Predicate 等內建泛型委託,融合了:

  • 泛型的參數化抽象能力
  • 委託的結構化靈活性(僅需簽名相容)
  • 靜態型別安全(編譯期檢查)

GoF 早預見泛型+委託的威力,C# 語言層面原生支援(C++ 需 Boost.Function)。

實戰範例:策略模式無介面版

// 以泛型委託替代 IStrategy 介面
public class Processor
{
    public Func Strategy { get; set; }
    public int Execute(int a, int b) => Strategy(a, b);
}

// 使用:直接傳入 Lambda,無需建立類別
var p = new Processor { Strategy = (x, y) => x + y };
Console.WriteLine(p.Execute(3, 5)); // 8

p.Strategy = (x, y) => x * y;
Console.WriteLine(p.Execute(3, 5)); // 15

泛型委託讓「演算法族群」以第一級函數形式流動,極大降低儀式性代碼。

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