考虑这个String.Split
重载的问题,它以StringSplitOptions
枚举作为参数。
枚举本身是公共的并且可以被包括 System 命名空间的所有东西访问,这不是很糟糕吗?我的意思是,枚举完全特定于Split
方法的选项,但它在其范围之外可用。
也许有更好的建模方法,比如将枚举放在 String 类本身中,并通过使用String.SplitOptions
例如访问它?我很少看到这种情况(我现在实际上不记得任何这种情况),所以我认为由于某种原因它不是首选。一般来说,我认为缩小事物的范围是一种最佳实践,因为可以说,通过在不正确的范围内使用类/成员来降低发生问题的机会。
我在Split
这里用作示例,但是 aEnum
也仅由我们的代码库中的方法或类使用是很常见的。我通常像任何其他类一样在单独的 cs 文件中将枚举创建为公共类型,但我很想听听解决这个“问题”的其他方法。
更新:
我刚刚发现这篇文章Folder
用一个类和一个枚举来攻击这个确切的问题,Filter
但似乎又违背了我认为在这种情况下更正确的做法(以某种方式将枚举放在类中)。ToddM 的其中一条评论(我碰巧同意)指出:
...
但是,即使那样,我也觉得你的逻辑是错误的。您对在类中嵌入枚举的主要抱怨是输入时间太长。考虑到 C# 的冗长程度,这并不是一个明智的论点。在 VS 中,CTRL+SPACE 是你的朋友。
从逻辑上讲,我觉得将枚举放在类中要正确得多。举个例子:什么是 MyNameSpace.Filter?它适用于什么地方?我猜这是您命名空间的过滤器?这是不可能的,尤其是当你的命名空间增长到包含几十个类时。
现在考虑 MyNameSpace.Folder.Filter —— 在我看来,Filter 以某种方式、形状或形式应用于 Folder 类要直观得多。实际上,可以使用自己的过滤器概念将另一个类添加到名称空间,其中一个成员可能是“文件”。仅仅因为您在命名空间中引入了一个新类,并不赋予您使用各种“帮助”类型污染该命名空间的权利。如果您是作为大型开发团队的一员进行开发,那么您的风格很粗鲁。
...