关于Juval Lowy的IDesign C#编码标准的问题

时间:2011-10-20 09:31:41

标签: c# .net coding-style standards

我们正在尝试使用IDesign C# Coding standard。不幸的是,我没有发现任何全面的文件来解释它给出的所有规则,而且他的书并不总是有用。

以下是我的开放式问题(来自第2章编码惯例):

  1. 否。 26:避免为枚举提供显式值,除非它们是2
  2. 的整数幂
  3. 否。 34:始终使用for循环
  4. 显式初始化引用类型数组
  5. 否。 50:避免将事件作为接口成员
  6. 否。 52:在类层次结构上公开接口
  7. 否。 73:不要在接口中定义特定于方法的约束
  8. 否。 74:不要在代理中定义约束
  9. 以下是我对这些的看法:

    1. 我认为在稍后添加新的枚举成员时,提供显式值会特别有用。如果在其他已存在的成员之间添加这些成员,我将提供显式值以确保现有成员的整数表示不会更改。
    2. 不知道我为什么要这样做。我会说这完全取决于我的程序的逻辑。
    3. 我看到有另外一种方法可以提供“Sink接口”(简单地提供所有“OnXxxHappened”方法),但是优先选择其他方法的原因是什么?
    4. 不确定他在这里的含义:这是否意味着“在非密封类中明确实现接口时,请考虑在可以覆盖的受保护虚拟方法中提供实现”? (请参阅“.NET组件编程第2版”,“接口和类层次结构”一章末尾)。
    5. 我想这是关于在使用泛型时提供“where”子句,但为什么在界面上这样做不好?
    6. 我想这是关于在使用泛型时提供“where”子句,但为什么这对委托人来说不好?

2 个答案:

答案 0 :(得分:3)

否。 26: 2的幂意味着你想使用枚举作为位掩码(标志)。这是指定枚举值的唯一原因。要在以后添加新成员,您仍然可以将它们附加到枚举定义而不更改现有值。没有理由把它们放在现有成员之间。

否。 34:我认为他想避免你有一个包含(部分)未初始化指针(null引用)的数组的情况。作为阵列的消费者很诱人  不检查有效数组变量中的空条目。

答案 1 :(得分:2)

没有。 26:他错了,至少在公开场合是这样。当您删除项目时,问题就会出现,而不是在添加项目时(添加到列表末尾相当于添加具有下一个可用值的项目)。

对于其他人,我真的不确定他为什么提出这些建议,虽然我不得不承认我发现他们中的一些(或者大多数)相当可疑......