除了长期解释之外,我还有一种情况需要基本上重新实现.NET框架类,以便以与继承或组合/委派策略不兼容的方式扩展行为。问题不在于我采取的行动方针是你要做的,还是建议,而是一个命名/编码风格的问题。
是否存在一种范式,用于命名具有与现有类或方法相同功能的类和方法,以及C ++中存在的ClassEx / MethodEx的约定?
[编辑] 我知道为此选择好名字很重要......我还没有编写一行代码,而是花时间思考我将要采取的措施的后果,包括寻找明确的,描述性,名称,同时试图简洁。问题是我想到的名字并不十分简洁。 [/编辑]
答案 0 :(得分:5)
以下是我在.NET Framework中看到的方法:
将其称为略有不同,但不要使用任何特定后缀。例如,System.TimeZoneInfo
被引入以取代System.TimeZone
。
将它放在另一个名称空间中。例如,WPF Button
位于System.Windows
而不是System.Windows.Forms
。
用数字加上后缀。例如X509Certificate2
与X509Certificate
。 (这种做法在COM接口中很常见,但在.NET中已不再受欢迎了。)
请注意,TimeZoneInfo
的命名是微软正在处理这个有争议的命名问题的公开案例。有关优秀信息,请参阅http://blogs.msdn.com/kathykam/archive/2007/03/28/bye-bye-system-timezone2-hello-system-timezoneinfo.aspx和http://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 ++不同,C#中几乎没有理由这样做。在C ++中,添加方法会破坏兼容性,因此“Ex”成为更常见的场景。
答案 3 :(得分:0)
我提供了所有方法(和属性)camelCase名称:所以例如Invalidate
是框架方法名称,invalidate
是我的一个方法的名称。
这(使用camelCase名称)是非常规的,所以有些人反对它,但我觉得很方便。
类名没有这样的问题(我使用传统的UpperCase),因为对于类名,有一些名称空间可以将它们与框架类区分开来。