【发布时间】:2010-05-31 19:10:35
【问题描述】:
The IHideObjectMembers trick (a.k.a IFluentInterface) 可以用于例如在流畅的接口实现中隐藏 IntelliSense 中的 System.Object 成员。 (如果你不知道这个技巧,你可以通过上面的链接阅读它;我只是在这里重复接口的通常声明:)
using System;
using System.ComponentModel;
[EditorBrowsable(EditorBrowsableState.Never)]
public interface IHideObjectMembers
{
[EditorBrowsable(EditorBrowsableState.Never)] bool Equals(object obj);
[EditorBrowsable(EditorBrowsableState.Never)] int GetHashCode();
[EditorBrowsable(EditorBrowsableState.Never)] Type GetType();
[EditorBrowsable(EditorBrowsableState.Never)] string ToString();
}
我现在应该能够在另一种类型上隐藏System.Object 成员,如下所示:
public class SomeClass : IHideObjectMembers { ... }
或:
public interface ISomeInterface : IHideObjectMembers { ... }
我在 VS 2008 Express 和 VS 2008 Standard 中都试过这个。但是,没有任何成员对 IntelliSense 隐藏。我在不同的项目中使用过EditorBrowsableAttribute,它一直运行良好;但是,它在这种特定情况下不起作用。
如果事情按预期进行,我只会看到SomeMethodTwo 方法。
我错过了什么吗?
P.S.:您可以从声明和屏幕截图中推断出我的示例代码。我有一个类SomeClass 有一个名为SomeMethodTwo 的单一虚拟方法。非常简单。我没有在这个类中重新实现了四个System.Object 方法,因为这不是必需的。
【问题讨论】:
-
在最新版本的 Visual Studio (2015, 2017) 中,
IHideObjectMembers/IFluentInterface因 Roslyn 错误而变得无用;见github.com/dotnet/roslyn/issues/4434。
标签: visual-studio-2008 filter intellisense class-members