如何管理扩展方法的命名空间?您是对所有扩展方法使用全局包罗万象的命名空间,还是将扩展方法放在与它们扩展的类相同的命名空间中?或者您是否使用其他方法,如应用程序或库特定的命名空间?我问是因为我需要扩展System.Security.Principal.IIdentity,将扩展方法放在System.Security.Principal命名空间中似乎很有意义,但我从未见过这样做。我建议将所有扩展方法放在一个命名空间中(顺便说一句,这也是微软对Linq所做的,将它们放在“System.Linq”命名空间内的单个类“Extensions”中)。由于VisualStudio不提供有关如何查找要使用哪种扩展方法的线索,因此只需记住一个命名空间以减少混淆。将扩展放在与它们扩展的类相同的名称空间中。这样,当您使用类时,您可以使用扩展。此外,Microsoft对扩展方法是这样说的:一般来说,我们建议您只在必要时谨慎地实现扩展方法。必须扩展现有类型的客户端代码应该通过在必要时创建从现有类型派生的新类型来实现。有关扩展方法的更多信息,请参阅有关扩展方法的MSDN页面。如果它们是整个解决方案中使用的扩展方法(例如超过60%的类),我将它们放在解决方案的基础命名空间中(因为它们会自动导入到父命名空间中,而不会每次都导入常用的东西).在这个类别中,例如:.IsNullOrEmpty(thisstringvalue)and.HasValue(thisstringvalue)但如果它们非常具体且很少使用,我将它们放在BaseNamepace.Extensions命名空间中,因此它们必须手动导入,并且不要在智能感知中显示混乱的东西。我赞成user276695的回答,这似乎是最简单的解决方案。但我找到了一个更好的解决方案:根本没有命名空间。您可以将具有扩展方法的静态类放在文件的根目录中,而无需在其周围包装任何名称空间声明。然后扩展方法将可用而无需导入/使用任何名称空间。?我有点担心被名称空间纳粹分子投票淘汰。但我觉得有必要支持一个稍微非正统的立场。至少在我的工作(IT)中,我发现大多数自定义工具在没有名称空间的情况下更容易维护,并且将所有内容都放在一个巨大的匿名名称空间中。我敢肯定还有其他编程领域是行不通的。然而,在不同的情况下,我只是想指出您可以声明没有名称空间的类,甚至是具有扩展方法的类-对于那些也发现巨大的匿名名称空间更好的人。?您还可以保存一级缩进。:-)即使有3个巨型显示器,我也一直在寻找节省屏幕空间的方法。我的方法是将扩展放在与我扩展的源名称空间不同的名称空间中。通常,我通过将命名空间路径的“公司名称”部分添加到我正在扩展的命名空间,然后为其添加后缀“.Extensions”来创建命名空间。例如,如果我(无缘无故)扩展::System.Text.StringBuilder因为它是密封的,那么我会将我的扩展放在命名空间::CodeCharm.System.Text.Extensions中。这是我进行扩展时的经验法则,我怀疑我是否可以在其他解决方案中重用。如果将它们放在比当前名称空间更高的名称空间中,它们将自动显示。所以如果你有一个项目的命名空间,例如:AdventureWorksInc.WebAdventureWorksInc.LogicAdventureWorksInc.DataAccess然后直接声明你的扩展:namespaceAdventureWorksInc{publicstaticclassHtmlHelpers{publicstaticstringAutoCloseHtmlTags(thisstringhtml){//。..}}}每当您在AdventureWorksInc的任何子命名空间中编写代码而不使用语句时,都会显示此扩展方法。然而,上述扩展显示了可能的缺点。由于它对字符串进行操作,因此它现在将作为所有字符串的扩展方法出现,包括那些不是HTML的字符串。这实际上不是命名空间范围问题,它只是扩展方法的误用。这应该是一个采用标准参数的常规静态,因此调用是显式的。通常,具有适当类型参数的精心设计的扩展方法不会出现在它从未适用的类型上。以上是C#学习教程:如何管理扩展方法的命名空间?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
