C# 3.0 眾多新特性中,**Extension Method 最具創新意義**:在保持現有型別原封不動前提下進行擴充,無需修改型別定義即可新增方法成員。
JS 透過 prototype 動態擴充物件:
function Vector(x, y) { this.x = x; this.y = y; }
Vector.prototype.adds = function(v) {
if (v instanceof Vector) return new Vector(this.x + v.x, this.y + v.y);
alert("Invalid Vector object!");
};
var v = new Vector(1, 2);
v = v.adds(v); // 動態新增方法
Extension Method 之於 C# 3.0,如同 Prototype 之於 JavaScript:靜態語言實現動態擴充能力。
public interface IVector
{
double X { get; set; }
double Y { get; set; }
IVector Adds(IVector vector); // 直接修改介面
}
所有實作類別**強制重新編譯**,維護風險大。
C# 3.0 透過 Extension Method 在**不修改原型別**前提下實現擴充,下篇將詳細實作展示。