将自定义代码放入系统命名空间是否有任何最佳实践表明不应将自定义代码放置在系统命名空间中?System及其System是否应该保留给Microsoft代码?我问是因为我正在编写一个将在许多项目中使用的类库,并且我希望通过将它放在System.InteropServices中来保持一致(因为它处理P/Invoke)。这不是一个好主意,因为它破坏了名称空间的主要好处之一:防止名称冲突。如果较新版本的框架在该命名空间中引入了具有相同名称的类型怎么办?这对系统命名空间尤其不利,因为它们是通过在许多其他代码段中使用指令导入的,并且在这些命名空间中引入自定义类型会使用意外标识符污染其他源文件的命名范围。要对自定义互操作相关类型进行分类,请创建一个新的命名空间,例如MyProduct.InteropServices。如果在System.InteropServices中放置一个新类,则每个文件都有一个usingSystem.InteropServices;强制将您的类保留在范围内的子句,这会使程序员感到困惑。由于程序员无法证明这一点,我认为这是一种不好的做法。我不同意每个人的看法。我认为在有限的情况下(主要使用扩展方法)将代码放在系统名称空间中是完全合理的。这是我在电子邮件线程中讨论EPS中系统名称空间中的扩展方法的论点:好的,所以这是我的观点:我真的想尽量减少代码。这包括使用.是的,ReSharper选择扩展方法并为您添加用途,但有些人没有ReSharper,我更喜欢Coderush,它实际上(据我所知)并没有获得扩展命名空间。至少有两种不同类型的扩展方法;这些是我们应用程序的辅助方法——领域和应用程序特定的辅助方法,以及封装了我们认为语言应该从中开始的功能和语法的辅助方法。后者的一个很好的例子是能够执行"a{0}{1}".Format("b","c")或someListOfStrings.Join(",")而不必执行String.Join(someStringList.ToArray(),",")。其他更有争议的例子是IEnumerable.ForEach和IsNull()扩展,它们取代了笨拙的object.ReferenceEquals(null,someVar)语法。我的论点是,有充分的理由将后者分类——你的团队广泛同意应该用语言而不是——在适当的命名空间(System、System.IO、System.Linq等)中。我们希望这些函数随处可用,就像我们希望foreach和yield关键字始终可见一样。如果它是特定于应用程序的,那么它应该在自己的命名空间中。90%的特定于应用程序的帮助程序扩展不应该是扩展,甚至不是静态的。我使用扩展方法从该语句中排除以别名函数名称。当您调用包含系统范围扩展的程序集时,您当然会遇到一些麻烦。假设我正在引用包含我的voidIEnumerable.ForEach方法的程序集,并想创建我自己的类Ruby的RIEnumerable.ForEach(实际上它只是一个Select,但没关系)。这将是一个问题!我要解决的问题是将扩展类定义为内部类,以便它们只能在我的项目中使用。这很好地解决了这个问题。以上就是C#学习教程:将自定义代码放入System命名空间,分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
