我有一个用 VB.NET 编写的包含扩展方法的库。VB.NET 有两个特征在我看来与扩展方法的概念不一致:
这意味着扩展方法总是可以在命名空间级别访问,或者根本无法访问。这没有意义,因为它们的范围在概念上是它们扩展的类型,而不是命名空间。
将方法声明为扩展这一事实会影响其命名,因为虽然全局实用程序方法可能包含类型,例如GetDictionaryValueOrNull
,但扩展方法可能只是GetValueOrNull
因为它应该已经清楚地为该Dictionary
类型声明了它。当扩展方法是全局的时,这可能会令人困惑:假设我们在一个(非字典)类中,它有一个GetValue
方法。如果我们键入“GetValue”,Visual Studio 将同时列出“GetValue”和“GetValueOrNull”,使其看起来好像当前类支持这两种操作。
是否有任何解决方案(除了“用 C# 编写”)?我可以将模块标记为非全局模块,或者至少强制 Visual Studio 仅在扩展方法实际被查找为扩展方法时才显示它们吗?
Visual Studio 用户语音的建议:http: //visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4228049-include-an-option-to-disable-the-promotion-of-scop