Visual studio 2008 VS IntelliSense-IFluentInterface/IHideObjectMembers技巧不起作用。为什么?

Visual studio 2008 VS IntelliSense-IFluentInterface/IHideObjectMembers技巧不起作用。为什么?,visual-studio-2008,filter,intellisense,class-members,Visual Studio 2008,Filter,Intellisense,Class Members,(也称为IFluentInterface)可用于fluent接口实现中,例如从IntelliSense隐藏系统对象成员。(如果你不知道这个诀窍,你可以通过上面的链接来了解它;我只是在这里重复接口通常的声明:) 使用系统; 使用系统组件模型; [EditorBrowsable(EditorBrowsableState.Never)] 公共接口iHideObject成员 { [EditorBrowsable(EditorBrowsableState.Never)]布尔等于(对象对象对象); [Edi

(也称为
IFluentInterface
)可用于fluent接口实现中,例如从IntelliSense隐藏
系统对象成员。(如果你不知道这个诀窍,你可以通过上面的链接来了解它;我只是在这里重复接口通常的声明:)

使用系统;
使用系统组件模型;
[EditorBrowsable(EditorBrowsableState.Never)]
公共接口iHideObject成员
{
[EditorBrowsable(EditorBrowsableState.Never)]布尔等于(对象对象对象);
[EditorBrowsable(EditorBrowsableState.Never)]int GetHashCode();
[EditorBrowsable(EditorBrowsableState.Never)]类型GetType();
[EditorBrowsable(EditorBrowsableState.Never)]字符串到字符串();
}
我现在应该能够在另一种类型上隐藏
System.Object
成员,如下所示:

公共类SomeClass:iHideObject成员{…}
或:

public接口:iHideObject成员{…}
我在VS2008Express和VS2008Standard中都试过了。但是,IntelliSense根本不会隐藏任何成员。我在不同的项目中使用过
EditorBrowsableAttribute
,它一直运行良好;但是,它在这个特定场景中不起作用

如果事情按预期进行,我只会看到
SomeMethodTwo
方法

我错过什么了吗



p.S.:您可以从声明和屏幕截图中推断出我的示例代码。我有一个类
SomeClass
,它有一个名为
SomeMethodTwo
的伪方法。很简单。我没有在这个类中重新实现四个
系统.Object
方法,因为这是不必要的。

在发布一个有效的解决方案之前(见上文),我进行了一些研究和实验,发现了这一点:

  • 需要告知IntelliSense忽略标有
    EditorBrowsableState
    equaling
    Advanced
    Never
    的属性。这是在VisualStudio中通过菜单项“工具”实现的→ 选项。。。→ 文本编辑器→ #→ 智能感知→ 隐藏高级成员

  • IHideObjectMembers
    技巧仅适用于“其他”程序集,并且仅当使用
    IHideObjectMembers
    的项目未加载到同一解决方案中时有效

  • 通过
    IHideObjectMembers
    接口隐藏
    对象的非静态成员有时不起作用,但在类中直接显式重写这些方法时,它会起作用。。。不幸的是,这使得显示的隐藏技术没有那么有用

这些线索的来源:

  • exdream.com上的博客文章

  • 这个


此技巧仅在使用引用DLL中包含的类型时有效。这些引用的程序集不能是Visual Studio项目引用。如果您引用DLL本身,那么这个技巧应该对您有效。

如果您不使用

var x = new SomeClass();
但要明确使用继承自
iHideObject成员的接口

ISomeInterface x = new SomeClass();
var
采用具体类的类型。因此,IntelliSense将查找
object.ToString()
,而不是
IHideObjectMembers.ToString()
。前者不使用
EditorBrowsableAttribute
修饰,而后者则使用
EditorBrowsableAttribute修饰

Daniel Cazzulino在他的帖子中明确提到了接口

我们已经用fluentapi中的所有接口实现了这一点


有趣。我无法使用VS 2010使其在解决方案的外部或内部工作。+1可以相信这只是您工作的第二次升级投票。(试图在VS10上诊断相同的问题)NB不是VS10的问题-它所做的所有更改是没有隐藏高级成员设置来检查。只要不是项目引用,它就可以工作。我注意到的一个负面影响是,Ctrl.,ImplementInterface现在显式地生成了4个方法(尽管它只在缺少“真正的方法”时提供自己),但我想生活还会继续。(VS08中也存在同样的负面影响)在Visual Studio的最新版本中(2015年、2017年),
iHideObject成员
/
IFluentInterface
因Roslyn bug而变得无用;看见