在Visual Studio中隐藏接口方法以避免在Intellisense中显示

3

我有一个接口,它有很多方法。在实现类中,我不应该在Intellisense中看到这些方法。我该怎么做?

2个回答

7

您可以在方法上使用EditorBrowsableAttribute

EditorBrowsableAttribute指定属性或方法在编辑器中可见。EditorBrowsableAttribute是向设计师的提示,指示属性或方法是否应显示。您可以在可视化设计器或文本编辑器中使用此类型来确定对用户可见的内容。例如,Visual Studio中的IntelliSense引擎使用此属性来确定是否显示属性或方法。

类似于:

 

   [EditorBrowsable(EditorBrowsableState.Never)]
   public void GetId()
   {
   }

1
只要在同一个程序集中使用代码,EditorBrowsable就会被忽略。 - Rune FS
感谢您宝贵的回答 :) - Neelima

5

您需要显式实现它们。

如果您的接口是:

interface IFoo{
  void DoSomething();
}

那么你可以像下面这样在类中明确实现它:
class Foo : IFoo {
  void IFoo.DoSomething();
}

说了这么多,你可能会想知道为什么要这样做。接口通常用于定义给定类型的对象所能够实现的契约。想要隐藏它可能是设计过程中出现问题的迹象。当然,也有很多使用显式实现的有效情况。例如,字典(Dictionary)对IEnumerable>的许多方法都有显式实现,但隐藏应该是例外而不是规则。
如果您声明接口类型的变量/成员,则方法将显示;如果您声明具体类型的成员/变量,则方法将不会显示。由于通常应优先使用接口而不是具体类,因此这又是一个提示,表明您可能需要查看隐藏接口声明的原因。

谢谢,我明白了……这实际上是个面试问题,你能告诉我是否有其他方法可以在 IntelliSense 中隐藏接口的方法吗? - Neelima
@Neelima,这是一个非常奇怪的面试问题,至少有两个理由。1)没有完美的答案。使用属性只适用于程序集外部,显式实现不是为此而设计的。2)这是一种你要么知道它要么不知道的问题。这类问题并不能告诉你关于受访者的熟练程度,只能说明他或她的记忆力如何,但无法说明他们的设计、分析或解决问题的能力是否好。 - Rune FS
非常感谢你,Rune。我觉得当我们显式实现接口时,智能提示不支持它。也就是说,当我们写出接口名称并在后面加上一个点时,我们应该无法在智能提示中看到方法名称...也许我需要回答:"在显式实现中,我们将无法获得智能提示支持"。 :) - Neelima

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