【问题标题】:do interfaces belong in files of their own接口是否属于它们自己的文件
【发布时间】:2009-06-26 11:26:01
【问题描述】:

根据经验,我通常将类放在自己的文件中。 Visual Studio 似乎鼓励这样做,但关于接口什么是合适的?

例如

我有实现接口 Bar 的类 Foo

public interface IBar
{

}

public class Foo : IBar   
{

}

在另一个类实现接口之前将它们分组在同一个文件中似乎很自然,但是将一个文件专用于 2 行代码似乎过多但正确。

什么是合适的?

【问题讨论】:

    标签: c# coding-style interface


    【解决方案1】:

    我会将它们分成 2 个文件。我经常发现当它们不在自己的文件中时,它们开始变得难以管理。

    想象一下试图在名为 IBar.cs 的文件中查找类 Foo,反之亦然。

    【讨论】:

    • + 手动和通过脚本编写绝对更易于管理。
    • 好吧,如果我所做的只是为可测试性提取一个接口,那么在课堂上是一个好地方。当有超过 1 个实现时,将两者分开会更有吸引力。
    【解决方案2】:

    由于接口的目的是为(可能)多个实现类定义“契约”,我想说将接口定义放在自己的文件中更有意义。即如果你也想让 Baz 实现 Foo 会发生什么?

    【讨论】:

      【解决方案3】:

      根据情况,我要么将每个接口拆分为自己的文件,要么有一个 Interfaces.cs 文件,在其中我将给定命名空间中的接口组合在一起。

      我绝不会将接口与实现它的类放在同一个 .cs 文件中。

      【讨论】:

        【解决方案4】:

        我发现自己将多个顶级类型放在一个文件中只有两种情况:

        • 如果您要定义多个委托类型。每个都只会是一个声明,因此拥有一个 Delegates.cs 文件是有意义的。
        • 有时声明一大堆自动生成的部分类型实现了一堆接口是有意义的。同样,每种类型只有一行:

          // Actualy code is in the autogenerated file
          public partial class Foo : ICommon {}
          

        除此之外,我为每个顶级类型使用一个文件,用于接口、类和枚举。

        【讨论】:

          【解决方案5】:

          您当然应该将接口放在它自己的文件中。您甚至可以考虑将接口放入它自己的类库中。如果接口将由两个不同库中的两个不同类使用,则将接口放在第三个库中是有意义的,因此如果要将接口添加到新项目,则不必包含任何特定实现。在第三个库中,您还可以放置与实现接口的类一起使用的类(例如,public void Cook(IBar x))。

          【讨论】:

            【解决方案6】:

            是的,拥有一个接口意味着您将拥有多个具有相同方法和属性定义的类。暂时将其放在一个文件中很方便,因为无需更改文件即可轻松修改。随着时间的推移,您将和其他班级使用它,如果您必须在以后对其进行更改,您将不得不寻找并挑选正确的文件。

            【讨论】:

              【解决方案7】:

              我总是将它们放在单独的文件中。每个文件有多个类型只会分散 IMO 的注意力。不过,我可能会为他们创建一个文件夹“接口”。 另外我认为你不应该像你的实际实现那样经常修改它们,所以将它们分开至少会促进一点。

              【讨论】:

                【解决方案8】:

                在封装方面,每个对象,无论是类还是接口,都应该在自己的文件中。即使接口只包含一个抽象方法,它位于不同文件中的事实也允许更好的组织和更好的封装。您可以将这些不同的接口存储在一个文件夹中,为其提供适当的命名空间,从而获得更简洁的解决方案。

                【讨论】:

                • 我想说封装是代码本身的属性,与它在文件系统中的存储位置无关。将内容放在有用命名的文件中通常很有用,但这不是封装 IMO 的一部分。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-11-11
                • 1970-01-01
                • 2014-10-27
                • 1970-01-01
                • 1970-01-01
                • 2021-03-03
                • 1970-01-01
                相关资源
                最近更新 更多