隐藏等于和引用等于

Luc*_*s B 5 c# intellisense visual-studio-2008

我正在创建一个内部类来为 Contract 模式提供一个构造。

using System;
using System.Runtime.Serialization;

namespace DCS2000.Common35.Core
{
  public class Assertion
  {
    public static void Ensure(bool test)
    {
        if (!test)
        {
            throw new PreconditionException("Precondition test failed");
        }
    }

    public static void Ensure(object obj)
    {
        if (obj == null)
        {
            throw new PreconditionException("Precondition null object failed");
        }
    }

    public static void Require(bool test)
    {
        if (!test)
        {
            throw new PostconditionException("Postcondition test failed");
        }
    }

    public static void Require(object obj)
    {
        if (obj == null)
        {
            throw new PostconditionException("Postcondition null object failed");
        }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当开发人员开始使用它时,他们将在 Intellisense 中看到这些选项:

  • 确保
  • 等于
  • 引用等于
  • 要求

这令人困惑,我想知道是否有办法隐藏 Equals 和 ReferenceEquals。

注意:我已经尝试过这个,但它对我不起作用:

    [EditorBrowsable(EditorBrowsableState.Never)]
    public override bool Equals(object obj)
    {
        return base.Equals(obj);
    }
Run Code Online (Sandbox Code Playgroud)

Luc*_*s B 4

使用:

    [EditorBrowsable(EditorBrowsableState.Never)]
    public override bool Equals(object obj)
    {
        throw new Exception("Assertion does not implement Equals, use Ensure or Require");
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public new bool ReferenceEquals(object objA, object objB)
    {
        throw new Exception("Assertion does not implement ReferenceEquals, use Ensure or Require");
    }
Run Code Online (Sandbox Code Playgroud)

如果开发人员设置了适当的 VS 设置,这将隐藏成员,并且在运行时期间,如果开发人员无意中在代码库中使用了 Equals 或 ReferenceEquals,则会立即通知开发人员他们不恰当地使用了 Equals 或 ReferenceEquals。