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

理解 C# 3.0 新特性之 Extension 方法淺議 (1) - JavaScript Prototype 類比與 C# 2.0 侷限

     編輯:關於C語言

Extension Method 核心價值

C# 3.0 眾多新特性中,**Extension Method 最具創新意義**:在保持現有型別原封不動前提下進行擴充,無需修改型別定義即可新增方法成員。

JavaScript Prototype 類比

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:靜態語言實現動態擴充能力。

C# 2.0 如何解決型別擴充

介面擴充:唯一但脆弱


public interface IVector
{
    double X { get; set; }
    double Y { get; set; }
    IVector Adds(IVector vector); // 直接修改介面
}

所有實作類別**強制重新編譯**,維護風險大。

類別繼承:受限於封裝

  • 第三方組件類別無法修改
  • sealed 類別不可繼承
  • 繼承建立新類別 ≠ 原型別實例擁有新成員

Extension Method 解決方案預告

C# 3.0 透過 Extension Method 在**不修改原型別**前提下實現擴充,下篇將詳細實作展示。

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