1

我正在设计interface一个 C# 项目,该项目将使用各种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
    }
}

所有这些都将进入同一个文件。感谢您的任何建议!

4

3 回答 3

4

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

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

于 2013-06-11T13:03:53.263 回答
2

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

于 2013-06-11T13:00:12.560 回答
1

继续使用不同的文件,例如接口应该在一个文件中,而类应该在不同的文件中,这将继承接口。如果你这样做,你可以使用不同类的接口来获得相同的签名。更改类名,从接口的“I”开始。

于 2013-06-11T13:05:20.893 回答