隐藏VB.NET扩展方法/模块

3
我有一个用VB.NET编写的库,其中包含扩展方法。在我看来,VB.NET有两个特点与扩展方法的概念相矛盾:
  • 扩展方法必须在模块中声明(扩展方法
  • 所有模块成员都在命名空间范围内(类型提升
这意味着扩展方法始终可以在命名空间级别访问,或者根本无法访问。这是没有意义的,因为它们的作用域在概念上是它们扩展的类型,而不是命名空间。
一个方法声明为扩展方法的事实影响了它的命名,因为全局工具方法可能会包括类型,例如GetDictionaryValueOrNull,而扩展方法可以简单地是GetValueOrNull,因为已经清楚它是为Dictionary类型声明的。当扩展方法是全局的时候,这可能会让人感到困惑:假设我们在一个(非字典)类中有一个GetValue方法。如果我们输入"GetValue",Visual Studio将列出"GetValue"和"GetValueOrNull",使当前类似乎支持这两个操作。

是否有任何解决方案(除了"用C#编写")?我可以将模块标记为非全局的,或者至少强制Visual Studio仅在实际查找扩展方法时才显示扩展方法吗?

Visual Studio User Voice上的建议:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4228049-include-an-option-to-disable-the-promotion-of-scop

2个回答

0
明显的选择是将您的扩展方法放入一个特定的命名空间中,只有在需要时才导入它们。

0
我最近将所有的扩展方法都移到了一个命名空间*.Extensions中,其中*是被扩展对象所属的命名空间。这样即使是BCL类型也能正常工作,并且我可以只导入我感兴趣的扩展而避免混乱的智能感知。
我对于区分实用函数和扩展方法唯一的建议就是在XML注释中明确标出它是一个扩展方法。
''' <summary>(extension) If the dictionary contains the specified key: return its value; otherwise null.</summary>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接