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

C# 3.0 語言詳解:擴展方法進階——調用形式、跨程序集、重載抉擇與優先級

     編輯:關於C語言

擴展方法調用的雙重形式


// 實例語法(推薦)
s.ExtFunc();

// 靜態語法(編譯器實際生成形式)
SampleExtensions.ExtFunc(s);
// 兩者 IL 完全等價

跨程序集擴展:擴展 BCL 類型

為 string 添加 ToInt32


public static class StringExtensions
{
    public static int ToInt32(this string s) => int.Parse(s);
}

// 使用
string sval = "20";
Console.WriteLine(sval.ToInt32()); // 輸出 20
// String 原本無 ToInt32,擴展方法無縫增強

擴展方法導入與可見性

using 命名空間即導入該空間下所有靜態類的擴展方法。無需單獨導入類。

重載抉擇:擴展方法最低優先級

規則

  1. 實例方法優先(含繼承)
  2. 擴展方法次之
  3. 同簽名擴展方法衝突:最近 using 勝出

驗證案例


public class SampleClass { public void Func() => Console.WriteLine("實例"); }
public static class Ext { public static void Func(this SampleClass s) => Console.WriteLine("擴展"); }

new SampleClass().Func(); // 輸出:實例
// Ext.Func(new SampleClass()); // 顯式調用擴展方法

多層衝突優先級

  • 同程序集靜態類 > 外部程序集 using 導入
  • 同簽名多靜態類:最後定義/最後 using 勝出

示例代碼結構

方案 CSharp3Sample1 包含 4 個項目 Ex01~Ex04,對應各節示例。需 VS2005 + LINQ Preview 運行。

總結

擴展方法雖為靜態方法語法糖,但其跨程序集擴展能力、最低優先級保護實例方法、命名空間導入機制構成了完整的生態系統。理解重載抉擇規則,能避免「擴展方法不生效」的困惑,自信構建流式 API。

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