C#:是否可以使用部分扩展类

时间:2012-05-30 07:37:05

标签: c#

我希望创建扩展类,将不同程序集中的实体框架实体扩展到EF实体。我还想在扩展方法类(使用T4)中编写一些附加/泛型方法,然后能够使用其他自定义方法创建部分扩展方法类。这可能。

3 个答案:

答案 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#的规则,足以让扩展方法在类之外生存。

答案 1 :(得分:2)

是的 - 我尝试了它并且有效。

没有“扩展”类这样的东西 - 只有扩展方法必须在“静态”类中。

您可以拥有静态部分类。

更新:对不起,我看了你的标题,但没有看到问题的文字。 答案仍然是肯定的,但为什么不创建新的类?在这种情况下,我无法看到部分课程如何真正有用。

答案 2 :(得分:2)

我在这里可以看到的主要问题是“在不同的装配中”这个短语。如果不是这样的话,您可以使用常规实例方法在其他partial class中添加您的方法等,这样就可以了。

可以拥有静态部分类,但是你不能使用部分类来添加到另一个程序集中的类型。扩展方法在部分类中工作正常,但请注意,部分类纯粹是在不同文件之间拆分代码的机制。您可以轻松地为扩展方法提供多个静态类。