如何命名通用类的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 { } }