sta*_*ica 12 intellisense filter visual-studio-2008 class-members
的IHideObjectMembers特技(又名IFluentInterface)可用于例如,在连贯接口实现隐藏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();
}
Run Code Online (Sandbox Code Playgroud)
我现在应该能够隐藏System.Object其他类型的成员,如下所示:
public class SomeClass : IHideObjectMembers { ... }
Run Code Online (Sandbox Code Playgroud)
要么:
public interface ISomeInterface : IHideObjectMembers { ... }
Run Code Online (Sandbox Code Playgroud)
我在VS 2008 Express和VS 2008 Standard中都试过这个.但是,根本没有成员隐藏IntelliSense.我已经EditorBrowsableAttribute在不同的项目中使用它,它总是运作良好; 但是,它在这种特定情况下不起作用.
http://i48.tinypic.com/vhb4fq.jpg
如果事情按预期发挥作用,我只会看到这种SomeMethodTwo方法.
我错过了什么吗?
PS:您可以从声明和屏幕截图中推断出我的示例代码.我有一个SomeClass叫做单个虚拟方法的类SomeMethodTwo.非常简单.我没有System.Object在这个类中重新实现这四个方法,因为这不是必需的.
sta*_*ica 12
在发布工作解决方案之前(见上文),我进行了一些研究和实验,并发现了这一点:
需要告知IntelliSense忽略用EditorBrowsableState等于Advanced或标记的属性Never.这是通过菜单项工具 → 选项... → 文本编辑器 → C# → 智能感知 → 隐藏高级成员在Visual Studio中实现的.
该IHideObjectMembers技巧仅适用于"其他"程序集,并且只有在使用的项目IHideObjectMembers未加载到同一解决方案中时才有效.
隐藏非静态成员object有时在通过IHideObjectMembers接口完成时不起作用,但是当在类中直接显式覆盖方法时它会起作用...不幸的是,显示的隐藏技术不那么有用.
这些线索的来源:
博客文章如何在exdream.com上保持Intellisense信息框简洁.
如果你不使用,这个技巧是有效的
var x = new SomeClass();
Run Code Online (Sandbox Code Playgroud)
但明确地使用继承自的接口 IHideObjectMembers
ISomeInterface x = new SomeClass();
Run Code Online (Sandbox Code Playgroud)
var获取具体类的类型.因此,IntelliSense将寻找object.ToString()而不是寻找IHideObjectMembers.ToString().前者不是用后者装饰的EditorBrowsableAttribute.
Daniel Cazzulino明确地指出了帖子中的界面
我们使用流畅的API中的所有接口完成了这项工作
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |