2012-05-30 48 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与常规实例方法,这一切都会好起来的。

可以具有静态部分类,但是不能使用部分类添加到另一个部件中的类型。扩展方法可以从部分类正常工作,但请注意,部分类纯粹是用于在不同文件之间分割代码的机制。你可以像扩展方法一样容易地拥有多个静态类。

相关问题