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

2024-03-23

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

例如,我可以这样做:

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

然而,在点之后的每一步,都会弹出智能感知,显示 Object 类中的四个标准方法:GetHashCode、Equals、GetType 和 ToString。

我尝试在几个类中重写这些方法,附加编辑器可浏览属性 http://msdn.microsoft.com/en-us/library/system.componentmodel.editorbrowsableattribute.aspx归因于每个,但它们仍然出现。我就没有办法隐藏它们吗?

请注意,我并不是试图对类本身隐藏它们,只是对智能感知隐藏它们。

基本上,我想要这样:

                         +---------------+
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,并对其应用相同的属性,这也显示出来了,所以很明显该属性没有按照我想象的那样执行。

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


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

我的错误是我没有在正确的类中标记所有方法,但即使更正它,这些方法仍然出现。

原来文档中的注释是这样的:

在 Visual C# 中,EditorBrowsableAttribute 不会抑制同一程序集中的类的成员。

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

在 Visual C# 中,EditorBrowsableAttribute 不会抑制同一类中的成员开放解决方案.

我在适当的类中标记了方法,进行了完全重建,在解决方案文件之外创建了一个新项目,对我的 IoC 项目中的编译文件进行了文件引用,你瞧,这些方法消失了。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Visual Studio for C# 中从流畅的接口类智能感知中隐藏 GetHashCode/Equals/ToString? 的相关文章

随机推荐