我有一个用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