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
equalingAdvanced
或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而变得无用;看见