我正在创建一个内部类来为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");
}
}
}
}
当开发人员使用它时,他们会在Intellisense中看到这些选项:
这令人困惑,我想知道是否有办法隐藏Equals和ReferenceEquals。
注意:我已经尝试过这个,但它对我不起作用:
[EditorBrowsable(EditorBrowsableState.Never)]
public override bool Equals(object obj)
{
return base.Equals(obj);
}
答案 0 :(得分:4)
要添加到Matti的答案,EditorBrowsableState.Never
取决于用户在选项,文本编辑器,C#,常规下的Visual Studio设置。
仅当用户启用了“隐藏高级成员”时才会生效。 Visual Studio默认显示所有成员。
答案 1 :(得分:3)
使用:
[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");
}
如果开发人员设置了适当的VS设置,这将隐藏成员,并且如果他们无意中在代码库中使用它,将立即在运行时通知开发人员他们不恰当地使用Equals或ReferenceEquals。 / p>
答案 2 :(得分:-2)
老实说,我认为任何自称为.NET开发人员的人都应该习惯使用这些方法,并在不需要时忽略它们。
如果你真的想要隐藏它们,如果它们都是可以覆盖的(我忘记了ReferenceEquals
是因为我从未使用它),你可以将它们覆盖为private override
德尔>
好的,这不起作用。现在我看了它,private override
没有意义,protected override
也不被允许,private new
和protected new
创建新方法,而基类方法仍可访问。我认为你根本不能用访问修饰符来隐藏它们。
似乎整个事情都是关于静态方法的。哎呀,我真的失败了。