【发布时间】:2012-06-29 09:23:55
【问题描述】:
我们的编码标准“规则”之一是:
- 使用通用类型系统。例如,使用
Int32而不是int。
我以前从未见过类似的规则,尽管我们的其他准则大致基于 Microsoft 的 Design Guidelines Digest。 Common Type System 似乎也不像。
我发现这很不方便,因为我最终不得不重写默认的 Visual Studio 和 ReSharper 重构以将 string 转换为 String、float 转换为 Single、long 转换为 Int64 等。
它的应用也相当不一致(例如,不适用于 object 到 Object),可能是由于其不便,并且没有 StyleCop 规则来检查它是否已应用。
因此,我想知道为什么会设置此规则。有什么好的理由吗?例如,是否有任何情况(可能是历史性的)必须使用Int32 而不是int?
更新:
我通读了推荐的框架设计指南(2006 年,Cwalina 和 Adams)第 3.2.3 节 避免使用特定语言的名称,他们指出“避免使用这些名称很重要特定于语言的类型名称在标识符中”(我的重点)。同意。
然而,Jeffrey Richter 继续评论“我更进一步,从不使用该语言的别名,[因为它] 没有增加任何价值,并引入了巨大的混乱”。 也许这就是这条规则的由来?
【问题讨论】:
-
可能有 c/c++ 可移植背景的人偏执?
-
很少有不能使用通用类型系统的情况。一个例子:你有没有try to inherit an enum from System.Int16 instead of byte ?
-
如果这是确切的措辞,那么写它的人就会感到困惑。在 C# 中,
int是System.Int32的确切同义词,因此也是“通用类型系统”的一部分。现在,如果他们写的是“使用类型的本地名称而不是 C# 同义词”,他们至少会是准确的(尽管仍然被误导,IMO) -
如果规则不方便,请更改它。事实上,我在我们的编码标准中写了相反的内容:)
-
我们的编码标准要求对变量使用别名类型名称,例如
string和int并使用 C# 同义词进行静态成员访问,例如Int32.MaxValue和String.Format。我们发现这使它更清晰,因为它更符合命名标准(即类和结构名称应该是 Pascal Case)。小写用于string和int以及其他可以声明为const的变量;使用Object代替object,因为它不能被声明为const。
标签: c# .net coding-style clr