C# - 在哪里放置接口扩展?

时间:2013-06-11 12:58:21

标签: c# interface extension-methods project-structure

我正在C#项目中设计interface,该项目将使用各种extension methods进行扩展。现在我想把包含扩展方法的静态类放在与接口本身相同的文件中。

我不确定这是否违反了1 thing per file的原则。 我倾向于认为这与它们密切相关,以至于它们可以进入同一个文件。然而,我仍然希望听到更有经验的开发人员的意见。

在可维护性,代码可读性和良好的结构方面,这里有什么方法?我想到了以下几点:

public interface IFoo
{
    int Property { get; }
    void Method();
}

public static class IFooExtensions
{
    public static void AnExtension(this IFoo foo)
    {
        // Do Something
    }

    public static void AnotherExtension(this IFoo foo)
    {
        // Do Something else
    }
}

所有这些都会进入同一个文件。谢谢你的建议!

3 个答案:

答案 0 :(得分:4)

我发现“每个文件一件事”规则有一些实际的例外;接口是一种常见的情况。也许您想要一个仅在该接口的上下文中使用的简单枚举,或者您将接口与其实现配对为mentioned by @jlew,或者在您的情况下,也许一些简单的扩展方法可以放在同一个文件中。但如果实现变得复杂,我会将它们移动到一个单独的文件中。

但是,请记住,通过导入定义它们的命名空间可以使扩展方法可用。因此,请考虑扩展方法的典型用法。也许有一个不同的命名空间与将使用这些扩展方法的特定上下文相关联。但是如果这些扩展方法是通用的,那么将它们保存在与接口本身相同的命名空间中,并且可能在同一个文件中是有意义的。

答案 1 :(得分:2)

我认为没关系。如果您使用Visual Studio的代码导航功能和ReSharper等工具,则文件在很大程度上无关紧要。我喜欢把密切相关的东西放在一起(比如简单的接口和它们的一个具体实现)。

答案 2 :(得分:1)

继续使用类似接口的不同文件应该在一个文件中,并且该类应该在将继承该接口的不同文件中。 如果你这样做,你可以使用不同类的接口来获得相同的签名。 更改班级名称,从' I' for Interface。