如何命名通用类的C#源文件

我试图坚持一般的命名约定,如“开发类库的devise指南”中所述。 我将每种types都放到它自己的源文件中(部分类将按照部分类文件的命名规则中的描述,被分割成几个文件),使用types的名称作为文件名。

例子:

namespace Demo.Bla // project { enum FlowDirection { } // in file FlowDirection.cs class LayoutManager { } // in file LayoutManager.cs } namespace Demo.Bla.LayoutControllers // folder LayoutControllers in project { class StackPanelLayoutController { } // in file LayoutControllers/StackPanelLayoutController } 

但我不确定我是否想出了一个巧妙的方法来命名包含generics类的源文件。 说我有下面的课,例如:

 namespace Demo.Bla.Collections // folder Collections { class Map<T> { } // in file Map.cs (obviously) class Bag { } // in file Bag.cs (obviously) class Bag<T> : Bag { } // also in file Bag.cs ??? } 

我应该把非通用和通用Bag类的代码放到同一个Bag.cs文件中吗? 你的习惯是什么?

我认为这个问题的常见解决scheme是这样命名文件:

 {ClassName}`{NumberOfGenericParameters} 

这会给你这个文件名:

 Bag.cs and Bag`1.cs 

这是Microsoft在Asp.net Mvc等框架中处理这个问题的方式。

我看过一些使用的库

 Bag.cs Bag`1.cs Bag`2.cs 

因为这是Type.Name将显示的内容。

我想用types参数更具描述性,所以我最近倾向于使用

 Bag.cs Bag{T}.cs Bag{TKey, TValue}.cs 

这是XML注释也支持的格式。

 /// <summary> /// ... /// Uses the <see cref="T:MyLibrary.Bag{TKey, TValue}" /> class. /// </summary> 

通常,如果我有几个types的参数数量“重载”,这是因为一个从另一个派生或一个用于创build另一个。 我只是把它们放在同一个文件中。

另一种select是将它们拆分成不同的文件,将一个文件作为“主要”文件,其他文件依据构build文件中的“依赖”,就像在问题中链接的部分类问题一样。

这样,你可以在Visual Studio中build立一个可视化的链接,但是每个文件仍然只有一个类,以方便使用它们。

我添加一个后缀“T”到我的generics类的名字。

 class Bag { } // in file Bag.cs class BagT<T> : Bag { } // in file BagT.cs class BagInputs : BagT<Input> // in file BagInputs.cs 

你问,

我应该把非通用和通用Bag类的代码放到同一个Bag.cs​​文件中吗? 你的习惯是什么?

上述公约是不规​​范的; 我应该澄清,我正在回答“我的习惯是什么”,而不一定是“你应该做什么”。

在CoreFX GitHub存储库中,Microsoft遵循Matthias Jakobsson的回答中所述的回拨规则

在这里输入图像说明

所以基本上:

 class ImmutableArray { } // ImmutableArray.cs class ImmutableArray<T> { } // ImmutableArray`1.cs ... class ImmutableDictionary<TKey, TValue> { } // ImmutableDictionary`2.cs 

而对于其他类中定义的类,名称由外部类+和内部类名( Outer+Inner.cs )组成:

 partial class ImmutableArray<T> // ImmutableArray`1+Builder.cs { class Builder { } }