5

我认为SA1402是一个很好的规则,但我对泛型有疑问。我有一个使用Func委托的类,所以名称与该签名大致平行。也就是说,我有名为Operation<TType>Operation<T, TType>等的类Operation<T1, T2, TType>。根据SA1402,我需要将所有这些小类放在单独的文件中,并对文件名进行一些奇怪的修饰。此外,如果我需要更改其中一项,我通常需要对其余部分进行更改。这似乎比单个模块更难支持。

SA1402允许同一基本类(以及部分)的泛型驻留在一个文件中是否有意义?在这种情况下,类的所有排列都Operation将驻留在“Operation.cs”中。

4

3 回答 3

4

它们是几个命名约定。好像最受欢迎的是

操作[TType].cs

操作[T,TType].cs

操作[T1, T2, TType].cs

但你也可以使用更经典的东西,比如

操作`1.cs

操作`2.cs

操作`3.cs

(见通用类文件名约定

于 2013-08-31T16:38:21.070 回答
2

我倾向于同意你的观点,总的来说,SA1402 是一个好主意。但是在这种特定情况下,以及其他类似的情况下(我有同一个类的通用和非通用实现)。像许多其他人一样,我认为 如果有意义的话,每个文件有一个以上的类是完全可以的。我选择在非常具体ScopeTarget级别上忽略此警告:

[assembly: SuppressMessage(
    "StyleCop.CSharp.MaintainabilityRules",
    "SA1402:FileMayOnlyContainASingleType",
    Justification = "How else would we name generic and non generic (https://stackoverflow.com/a/4063061/516433).",
    Scope = "type",
    Target = "~T:Pastdev.Cli.AppResources`1<!!0>")]
于 2018-12-29T20:58:30.933 回答
-1

Operation<TType>.cs如果您已覆盖 StyleCop 的fileNamingConvention设置(文件命名约定),则使用该方法将起作用。

否则,如果您将文件命名为:Operation{TType}.cs等,它会自动工作(注意花括号)

于 2020-01-30T23:12:28.767 回答