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

时间:2013-07-23 19:32:33

标签: vb.net visual-studio extension-methods

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

2 个答案:

答案 0 :(得分:0)

显而易见的选择是将扩展方法移动到特定的命名空间中,只有在需要时才能导入。

答案 1 :(得分:0)

我最近将所有扩展方法移动到命名空间*.Extensions,其中* extendee 所属的任何命名空间。这甚至适用于BCL类型,并且允许我仅导入我感兴趣的扩展,同时还避免混乱的智能感知。

我区分实用程序函数和扩展方法的唯一建议是添加xml注释,表明它是一个扩展方法。

''' <summary>(extension) If the dictionary contains the specified key: return its value; otherwise null.</summary>