實作介面的型別**必須實作所有方法**。新增介面方法 → 所有實作類別需重新編譯,維護期風險極大,故常改用抽象類別。
**不修改原型別定義**前提下,為其新增方法成員。這在現實開發中極具價值(第三方庫、sealed 類別、維護期凍結介面)。
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 };
}
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 在不修改型別定義前提下實現型別擴充,解決介面擴充脆弱、繼承受限、第三方組件不可修改等核心痛點。