2012-10-15 63 views
1

我想知道爲什麼不能爲'type instance'創建擴展方法。如果已經提供了這個功能,那麼例如可以「擴展」靜態類。爲什麼不可能爲'type instance'創建擴展

例子:

public static class A 
{ 
    public static void Method() 
    { 
    } 
} 

public static class AExtensions 
{ 
    public static void Method2(this static A a) 
    { 
     // something 
    } 
} 
+0

您究竟會如何使用這種擴展方法?如果你正在指定班級名稱,那麼你可以用「新班級」來做到這一點...... –

+1

因爲沒有必要。 – SLaks

+0

向方法調用添加複雜功能,而不是通過執行類型查找來確認類型具有它必須查詢實例的方法簽名。現在如果將它轉換成其他東西會發生什麼?該方法是否結轉?如果之前不存在命名空間衝突會怎麼樣?等等。 – TheZ

回答

1

當然好了真正的答案是:發展遠遠超過潛在的好處這樣的功能的成本。

然而,只要想一想。你真的會從這個功能獲得什麼?你已經可以完全合法地做到這一點,這實際上是「擴展」靜態類。

// 3rd party library 
public static class A { 
    public static void Method() { 
    } 
} 

// my source code 
public static class AExtensions { 
    public static void Method2() { 
    } 
} 

如果你認爲通過擴展類A你會以某種方式獲得其所有internalprivate成員訪問,那麼你將不能夠做到這一點,它會破壞封裝。你也不能用實例擴展方法做到這一點。