命名用于替换现有API的C#类/方法的建议

时间:2009-11-27 23:29:26

标签: c# c++ coding-style naming-conventions

除了长期解释之外,我还有一种情况需要基本上重新实现.NET框架类,以便以与继承或组合/委派策略不兼容的方式扩展行为。问题不在于我采取的行动方针是你要做的,还是建议,而是一个命名/编码风格的问题。

是否存在一种范式,用于命名具有与现有类或方法相同功能的类和方法,以及C ++中存在的ClassEx / MethodEx的约定?

[编辑] 我知道为此选择好名字很重要......我还没有编写一行代码,而是花时间思考我将要采取的措施的后果,包括寻找明确的,描述性,名称,同时试图简洁。问题是我想到的名字并不十分简洁。 [/编辑]

4 个答案:

答案 0 :(得分:5)

以下是我在.NET Framework中看到的方法:

  1. 将其称为略有不同,但不要使用任何特定后缀。例如,System.TimeZoneInfo被引入以取代System.TimeZone

  2. 将它放在另一个名称空间中。例如,WPF Button位于System.Windows而不是System.Windows.Forms

  3. 用数字加上后缀。例如X509Certificate2X509Certificate。 (这种做法在COM接口中很常见,但在.NET中已不再受欢迎了。)

  4. 请注意,TimeZoneInfo的命名是微软正在处理这个有争议的命名问题的公开案例。有关优秀信息,请参阅http://blogs.msdn.com/kathykam/archive/2007/03/28/bye-bye-system-timezone2-hello-system-timezoneinfo.aspxhttp://blogs.msdn.com/kcwalina/archive/2006/10/06/TimeZone2Naming.aspx

答案 1 :(得分:1)

尝试使用真实含义命名您的类/方法。

例如,如果您扩展Random功能以创建随机字符串,请将类命名为StringRandom或StringRandomizer等。

如果您使用适用于特定类/接口的通用扩展方法编写类,例如IList,请将其命名为ListExtensions。

如果您编写random.Next方法,返回minValue和maxValue之间的随机数,包括maxValue,请将方法命名为NextIncludingMaxValue。

如果编写线程安全的queue.Dequeue方法,请命名DequeueThreadSafe。

如果你编写queue.Dequeue方法阻塞,直到其他线程将项目排入队列,则将其命名为DequeueBlocking。

等......

答案 2 :(得分:0)

在大多数情况下,C#完全避免了这些情况,因为您可以轻松地使用新方法扩展类而不破坏二进制兼容性(您可以随意将类添加到类中,而不是添加到接口) ,并通过使用Extension方法。

与C ++不同,C#中几乎没有理由这样做。在C ++中,添加方法会破坏兼容性,因此“Ex”成为更常见的场景。

答案 3 :(得分:0)

我提供了所有方法(和属性)camelCase名称:所以例如Invalidate是框架方法名称,invalidate是我的一个方法的名称。

这(使用camelCase名称)是非常规的,所以有些人反对它,但我觉得很方便。

类名没有这样的问题(我使用传统的UpperCase),因为对于类名,有一些名称空间可以将它们与框架类区分开来。