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

本文关键字:扩展 是否 | 更新日期: 2023-09-27 18:35:55

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

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

你不需要它们。只需编写另一个扩展类。

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

是的

- 我试过了,它奏效了。

没有"扩展"类这样的东西 - 只有扩展方法必须位于"静态"类中。

可以有静态分部类。

更新:对不起,我读了你的标题,但没有读你的问题的文本。答案仍然是肯定的,但为什么不直接创建新类呢?在这种情况下,我看不出拥有分部类的真正帮助。

我在这里看到的主要问题是短语"在不同的程序集中"。如果不是这样,您可以使用常规实例方法将您的方法等添加到额外的partial class中,一切都会好起来的。

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