使用'Common Type System'作为编码标准

时间:2012-06-29 09:23:55

标签: c# .net coding-style clr

我们的编码标准“规则”之一是:

  
      
  • 使用通用类型系统。例如,使用Int32代替int
  •   

我之前没有看过类似的规则,尽管我们的其他指南大致基于微软的Design Guidelines Digest。它似乎不像Common Type System那样。

我觉得不方便,因为我最终不得不重写默认的Visual Studio和ReSharper重构来将string转换为Stringfloat转换为Single,{{1} } long等 它的应用也相当不一致(例如,不适用于Int64object),可能是因为它带来的不便,并且没有StyleCop规则来检查它是否已应用。

因此,我想知道为什么要制定这条规则。可能有充分的理由吗?是否有任何情况(可能是历史性的)必须使用Object代替Int32

更新

我阅读了推荐的框架设计指南(2006,Cwalina& Adams)第3.2.3节避免语言特定名称,并指出“避免使用这些特定于语言的类型名称 in identifier “(我的重点)。同意。

然而,杰弗里里希特继续发表评论“我更进一步,从不使用该语言的别名[因为它]没有增加任何价值,并引入了巨大的混乱”。 也许这就是这条规则的来源?

4 个答案:

答案 0 :(得分:3)

我怀疑这条规则来自对框架指南的错误解释。

指南在General Naming Conventions部分说明:

  

在标识符没有超出其类型的语义含义的极少数情况下,请使用通用公共语言运行时(CLR)类型名称而不是特定于语言的名称。

     

例如,将数据转换为Int16的方法应命名为ToInt16,而不是ToShort,因为ShortInt16的特定于语言的类型名称}。

如果您创建包含类型作为其名称一部分的标识符,例如一组SomeType ReadSomeType()方法,那么您应该使用SomeType的实际类型名称而不是C#别名。< / p>

以不同语言工作的程序员可能会将不同的含义与类型联系起来。例如,如果你有一个ReadFloat()方法,那么C#程序员会假设它返回System.Single,而一个F#程序员会认为它返回System.Double。因此,您应将其命名为ReadSingleReadDouble

此规则不适用于您在代码中引用类型的简单类型名称。一个使用你的库的程序员永远不会看到你使用的那个。

答案 1 :(得分:2)

建议Class Library Developers参考公开的名称:

  

在标识符没有超出其类型的语义含义的极少数情况下,请使用通用公共语言运行时(CLR)类型名称而不是特定于语言的名称。

但是,据我所知,从来没有人提出建议。内部变量。

答案 2 :(得分:0)

我无法想到这一点,但我必须通过说我只使用3.5+版本的框架并且可能有一些我不知道的历史原因来警告这一点。基本上,简单类型(int)只是预定义struct类型(System.Int32)的别名。有些观点可能会帮助您确定这样做的原因是不必要的,直接来自C#laungage指南......

&#34; 简单类型通过保留字(sbytebyte,...,intlong标识, ...,floatdouble),但这些保留字只是struct命名空间中预定义System类型的别名(System.SByte,{{1 },...,System.Byte等)。因为简单类型别名为System.Int32类型,所以每个简单类型都有成员。例如,struct的成员在int中声明,成员从System.Int32继承,声明如

System.Object

是允许的。&#34;

这继续下去,普通的第一句话是,简单的类型只是别名 - 就是它。没有理由做你所描述的事情。

我希望这会有所帮助。

答案 3 :(得分:0)

如果您在多语言环境中工作,或者您正在开发框架或共享库,则此规则是有意义的。

Firts,它保证CLS支持所有使用的类型(参见1)。其次,它避免了由不同.Net语言中具有不同名称的相同类型引起的混淆。

本主题在“框架设计指南:可重用.Net库的约定,惯用法和模式”一书中讨论,我强烈推荐。

Common Language Specification