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

理解 C# 3.0 新特性之 Extension 方法淺議 (2) - 實作細節與 Vector 範例

     編輯:關於C語言

Interface 擴充困境

實作介面的型別**必須實作所有方法**。新增介面方法 → 所有實作類別需重新編譯,維護期風險極大,故常改用抽象類別。

Class 繼承雖可擴充但有限制

  • 父類別新增 public/protected 成員 → 子類別自動繼承,不影響現有代碼
  • 但**無法修改第三方組件的 sealed 類別**
  • 繼承建立新類別無法滿足「原型別實例擁有新成員」的需求

Extension Method 解決核心痛點

**不修改原型別定義**前提下,為其新增方法成員。這在現實開發中極具價值(第三方庫、sealed 類別、維護期凍結介面)。

C# 3.0 Extension Method 實作

目標型別:Vector


public class Vector
{
    public double X { get; set; }
    public double Y { get; set; }
}

延伸方法定義


public static class Extension
{
    public static Vector Adds(this Vector p, Vector p1)
        => new Vector { X = p.X + p1.X, Y = p.Y + p1.Y };
}
  • 定義於 **static 類別**
  • 方法為 **static**
  • 第一參數前加 this 標記擴充目標型別

調用方式


var v = new Vector { X = 1, Y = 2 };
v = v.Adds(v); // 像實例方法調用
Console.WriteLine($"v.X = {v.X} and v.Y = {v.Y}");

this 關鍵字**僅能標記第一個參數**。

總結

Extension Method 在不修改型別定義前提下實現型別擴充,解決介面擴充脆弱、繼承受限、第三方組件不可修改等核心痛點。

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