代码之家  ›  专栏  ›  技术社区  ›  Lucas B

隐藏Equals和ReferenceEquals

  •  4
  • Lucas B  · 技术社区  · 14 年前

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

    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");
            }
        }
      }
    }
    

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

    这很混乱,我想知道是否有一种方法可以隐藏Equals和ReferenceEquals。

    注意:我已经试过了,但对我无效:

        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   Tim Robinson    14 年前

    加上马蒂的回答, EditorBrowsableState.Never 取决于用户在“选项”、“文本编辑器”、“C#”和“常规”下的Visual Studio设置。

        2
  •  3
  •   Lucas B    14 年前

    用途:

        [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");
        }
    

        3
  •  -2
  •   Matti Virkkunen    14 年前

    老实说,我认为任何自称为.NET开发人员的人都应该习惯于使用这些方法,在不需要时忽略它们。

    ReferenceEquals 是因为我从来没有用过),你可以用 private override .

    专用覆盖 毫无意义, protected override 也不太允许 private new protected new 在基类方法仍然可访问时生成新方法。我认为你根本不能用访问修饰符来隐藏它们。