"Удалить" базовый член?

Есть ли способ скрыть члена базового класса?

class A
{
  public int MyProperty { get; set; }
}

class B : A
{
  private new int MyProperty { get; set; }
}

class C : B
{
  public C()
  {
    //this should be an error
    this.MyProperty = 5;
  }
}

1 ответ

Решение

Нет средств, чтобы скрыть членов на языке C#. Самое близкое, что вы можете получить - это скрыть участника от редактора, используя EditorBrowsableAttribute,

public class B : A
{
    [EditorBrowsable(EditorBrowsableState.Never)]
    new public int MyProperty {
        get;
        set;
    }
}

Я бы осмелился сказать, что нет никакой гарантии, что это будет работать для других редакторов, кроме Visual Studio, поэтому вам лучше добавить исключение поверх него.

public class B : A
{
    [EditorBrowsable(EditorBrowsableState.Never)]
    public new int MyProperty {
        get {
            throw new System.NotSupportedException();
        }
        set {
            throw new System.NotSupportedException();
        }
    }
}
Другие вопросы по тегам