【问题标题】:How can I prevent a public class that provides extension methods from appearing in Intellisense?如何防止提供扩展方法的公共类出现在 Intellisense 中?
【发布时间】:2008-11-17 10:43:16
【问题描述】:

有没有办法从 Intellisense 中“隐藏”一个类的名称,该类的唯一目的是提供扩展方法?

我想从 Intellisense 列表中删除类名,但需要通过 Intellisense 以通常的方式将类的扩展方法提供给外部程序集。

【问题讨论】:

  • +1 提出一个好问题; System.Web.* 提供了他们自己的 StringExtensions,它始终将名称标识为 Intellisense 中的模棱两可。不会破坏任何东西,但我不喜欢在任何地方看到红色感叹号。

标签: c# extension-methods intellisense


【解决方案1】:

好的,我有这个问题的答案。 Hallgrim 建议用..标记课程。

[EditorBrowsable(EditorBrowsableState.Never)]

..确实有效,但仅在引用 程序集 的地方,而不是项目,就像我自己的 VS 解决方案在编写提供类的程序集时的情况一样。扩展方法照常可用。

【讨论】:

  • 显然 VB 智能感知不会显示在带有 [EditorBrowsable(EditorBrowsableState.Never)] 的类中定义的扩展方法。
【解决方案2】:

我希望您可以使用 EditorBrowsable 属性来做到这一点:

[EditorBrowsable(EditorBrowsableState.Never)]
static class MyExtensions { }

不幸的是,这似乎不起作用。

【讨论】:

    【解决方案3】:

    您的意思是要隐藏类还是扩展方法?

    如果您将静态类放在它自己的命名空间中,那么任何不使用 using 指令导入该命名空间的代码都不会“看到”扩展方法。

    【讨论】:

    • 隐藏类——我不需要用户看到提供方法的类的类名——但是这些方法应该像往常一样运行(即,可以针对适当的支持类型在Intellisense) - 这有意义吗?
    • 有点,但我不认为你会实现它。如果他们看到课程真的有问题吗?我不记得智能感知是否显示了扩展方法的来源,但如果确实如此,我会惊讶地(作为用户)看到一个我无法看到任何痕迹的类名。
    • 不,这不是一个大问题,但我将程序集作为实用程序提供,并希望它尽可能用户友好。我不担心用户在使用扩展方法时会看到提供的类名 - 而我不希望他们尝试执行“SupplyingClass obj = new ...”
    • 如果它是一个静态类(它必须包含一个扩展方法),它们无论如何都不能这样做——编译器会阻止它们。使类名表明用途,例如“SupplyingClassExtensions”然后就应该很明显了。
    【解决方案4】:

    如果您将扩展方法放在模块中,则会有一个名为 HideModuleName 的属性,该属性将隐藏模块名称,使其不显示在 Intellisense 中。

    【讨论】:

    • 我认为您指的是 Microsoft.VisualBasic.HideModuleName - 适用于 VB 模块(在 VB 项目中),但不适用于 C# 静态类 :(
    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 2012-02-23
    • 2011-04-11
    • 2017-02-27
    • 1970-01-01
    • 2016-02-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多