在Visual Studio for C#中从流畅的接口类intellisense隐藏GetHashCode / Equals / ToString?

时间:2009-09-23 08:35:01

标签: c# visual-studio methods intellisense hide

我有一个流畅的IoC容器注册过程接口,其中包含一些用于构建注册的类。

例如,我可以这样做:

builder.Register<IFoo>().From.ConcreteType<Foo>();

然而,在点之后的每一步中,会弹出intellisense,显示Object类,GetHashCode,Equals,GetType和ToString中的四种标准方法。

我尝试在几个类中重写这些方法,将EditorBrowsableAttribute属性附加到每个类中,但它们仍会显示出来。我没办法隐藏它们吗?

请注意,我并不是试图将它们隐藏在类本身之外,只是来自intellisense。

基本上,我喜欢这个:

                         +---------------+
builder.Register<IFoo>().|As             |
                         |By             |
                         |Equals         | <-- remove this
                         |From           |
                         |GetHashCode    | <-- and this
                         |GetType        | <-- as well as this
                         |ToString       | <-- and finally this
                         +---------------+

以下是我在Register<T>返回的课程中尝试的内容:

[EditorBrowsable(EditorBrowsableState.Never)]
public override Boolean Equals(Object obj)
{
    return base.Equals(obj);
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override Int32 GetHashCode()
{
    return base.GetHashCode();
}

[EditorBrowsable(EditorBrowsableState.Never)]
public override String ToString()
{
    return base.ToString();
}

这显然不起作用。还有什么我可以尝试的吗?

我还尝试添加一个新方法,而不是从Object覆盖,并将相同的属性应用于该方法,并且也显示出来,所以很明显该属性没有按照我的想法执行。

我注意到文档中的注释没有隐藏同一个程序集中的内容,但我尝试创建一个新项目,但它们仍然显示在那里。

2 个答案:

答案 0 :(得分:21)

好的,我找到了解决方案,部分是我的错,部分文档不完整。

我的错是我没有在正确的班级中标记所有方法,但即使在纠正时,方法仍然出现了。

原文中的说明如下:

  

在Visual C#中,EditorBrowsableAttribute不会禁止来自同一程序集中的类的成员。

实际应该是(强调我的):

  

在Visual C#中,EditorBrowsableAttribute不会在同一开放式解决方案中禁止来自某个类的成员。

我在相应的类中标记了方法,进行了完全重建,在解决方案文件之外创建了一个新项目,从我的IoC项目中对已编译文件进行了文件引用,并且看哪,方法消失了。

我会留下这个问题以防其他人遇到这个问题。

答案 1 :(得分:18)

根据thread,它是设计的。用EditorBrowsable(EditorBrowsableState.Never)修饰的方法/属性仅在intellisense中隐藏,如果它们是另一个引用的程序集中的类的一部分。该组件不应该是同一解决方案的一部分。