.net 如何命名接口的集合?

.net 如何命名接口的集合?,.net,collections,interface,naming-conventions,.net,Collections,Interface,Naming Conventions,情况如下 public interface IFoo { } public abstract class FooBase : IFoo { } 现在我需要一个带有一些附加方法的IFoo集合 public class IFooCollection : List<IFoo> { public void UsefullMethod() { } } 公共类IFooCollection:列表 { public void UsefullMethod(){} } 问题是,IFooCo

情况如下

public interface IFoo { }

public abstract class FooBase : IFoo { }
现在我需要一个带有一些附加方法的
IFoo
集合

public class IFooCollection : List<IFoo>
{
   public void UsefullMethod() { }
}
公共类IFooCollection:列表
{
public void UsefullMethod(){}
}
问题是,
IFooCollection
作为类时看起来像一个接口。选项如下

  • 保留它
    IFooCollection
    ——我不喜欢它,因为它看起来像一个接口
  • 命名它为
    FooCollection
    ——我不喜欢它,因为它不是foo的集合
  • 将其转换为
    FooBaseCollection
    ,因为
    IFoo
    的所有实现都源自
    FooBase
    ——我不喜欢这样,因为这可能永远不会是真的
  • 不要创建类,而是为IList提供扩展方法,因为只有一个完整的方法-我不喜欢这样,因为更改代码是因为找不到类的名称。。。是的,那太恶心了
  • 一些我没有想到或忘记写下来的东西-我希望我会喜欢它 那你会怎么做?有没有我错过的命名约定?我们基本上是在用这个

    更新


    代码不会变得广泛——它只是在GUI工具中,用于将一些数据放入服务器。因此,我不在乎将这些方法与其他集合一起使用,也不在乎忽略这些方法。

    我喜欢
    FooCollection
    您拥有概念对象“Foo”的集合,即使没有实际的
    Foo
    类或接口。这与
    IFoo
    是一个“Foo”的接口是一致的,即使没有
    Foo
    SpecialFoo
    将是一种特殊的“Foo”,即使没有
    Foo


    我完全同意,由于隐含的接口,
    IFooCollection
    是错误的。

    我实际上更喜欢#4而不是构建自己的集合类型,因为最终用户会希望将其IFoo实现对象填充到自己的列表和其他集合中。这样,这些集合将按预期工作。

    您已经确定了大多数选择

    我能想到的唯一额外的一个是Collectionofoo,但这不符合惯例


    我可能会选择IFooCollection。

    就我个人而言,我喜欢使用扩展方法的想法。如果您担心人们很容易找到扩展方法,只需将它们放在与IFoo接口相同的代码文件中的静态类中即可。或者在同一名称空间中的单独文件中创建一个“IFooExtensions”类,以便人们在查看“IFoo”时很容易发现它。

    FooCollection-使用“Foo”并不明显,因为Foo没有任何意义,所以很难概念化。尝试使用“真实”的类/接口名称,它会更有意义-例如

    public class ErrorHandlerCollection : List<IErrorHandler>
    {
      public void PublishErrors(){//...}
    }
    
    公共类ErrorHandlerCollection:列表
    {
    public void PublishErrors(){/…}
    }
    

    这是有意义的,因为ErrorHandlerCollection是错误处理程序的集合。实现IErrorHandler的任何东西都是错误处理程序,因此ErrorHandler集合中的任何东西都将是错误处理程序。

    IMO\35; 2是正确的命名,不过我也建议您使用傻瓜,因为您是从列表派生的。

    那么
    CollectionAfoo

    就我个人而言,我不喜欢在接口前加上“I”的惯例——这基本上是一种糟糕的匈牙利符号,这就是为什么它不好的一个例子