2012-05-30 49 views
1

我期待創建擴展類,將實體框架實體擴展到EF實體。我也想在擴展方法類(使用T4)中編寫一些附加/泛型方法,然後有能力使用其他自定義方法創建部分擴展方法類。這可能嗎。C#:是否有可能有部分擴展類

+0

你試過了什麼?我不清楚你想要做什麼,但是多個擴展類可以擴展相同的原始類,如果這就是你所要求的? –

回答

3

你不需要它們。只需寫另一個擴展類。

namespace Namespace1 
{ 
    public static class MyEntityBlibblingExtensions 
    { 
     public void Blibble(this MyEntity self) 
     { 
      // ... 
     } 
    } 
} 

然後,在別處......

namespace Namespace2 
{ 
    public static class MyEntityFurtlingExtensions 
    { 
     public void Furtle(this MyEntity self) 
     { 
      // ... 
     } 
    } 
} 

任何進口Namespace1會看到擴展方法Blibble()而任何進口Namespace2會看到Furtle(),和進口都將看到這兩個。它們可以位於不同的程序集或任何導入MyEntity命名空間的位置。所以,部分擴展並不是一個真正有效的概念。實際上,將擴展方法放在類中的想法有點像黑客一樣 - 他們不能屈服於C#的規則,以使擴展方法能夠在類之外生存。

2

是的 - 我試過了,它工作。

沒有這樣的事情作爲「擴展」類 - 只有擴展方法必須在「靜態」類。

您可以擁有靜態部分類。

更新:對不起,我讀了你的標題,但不是你的問題的文本。 答案仍然是,但爲什麼不只是創建新的類?在這種情況下,我看不出部分班級的真正幫助。

+1

有一個「擴展」類的東西。這是一個帶有'Extension'屬性的靜態類。它由編譯器添加,如果它包含任何擴展方法(它也具有'Extension'屬性),但是如果您使用反射和/或IL進行播放,則必須自己將靜態類標記爲擴展類。 – hvd

+0

好的,你去了,我們學到了一些東西。 – cbp

2

我在這裏可以看到的主要問題是短語「在不同的集會」。如果不是這樣的話,你可以添加你的方法等在一個額外partial class與常規實例方法,這一切都會好起來的。

可以具有靜態部分類,但是不能使用部分類添加到另一個部件中的類型。擴展方法可以從部分類正常工作,但請注意,部分類純粹是用於在不同文件之間分割代碼的機制。你可以像擴展方法一樣容易地擁有多個靜態類。

相關問題