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

Jan*_*Jan 12 .net c# standards coding-style

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

以下是我的常见问题(来自第2章编码实践):

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

以下是我对这些的看法:

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

Jan*_*Jan 3

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

第 34 号:我认为他想避免数组包含(部分)未初始化的指针(空引用)的情况。作为数组的使用者,很容易不检查有效数组变量中的空条目。

  • 因此,如果我想要 enum HttpStatusCode { Ok = 200, NotFound = 404 } 第 26 条规则建议不要使用枚举,因为它们被重视但不是标志?我的解释正确吗?大多数时候,当我使用枚举值时,是因为像这个例子这样的事情:在其他系统中定义的值。扑克牌的值、状态代码等。 (3认同)