Почему Решарпер считает, что внутренний класс со свойством «SomeValue» скрывает свойство с тем же именем во внешнем классе? - PullRequest
28 голосов
/ 18 января 2012

Учитывая следующий код:

public static class Super
{
    public static class Inner
    {
        public static string SomeValue { get; set; }
    }

    public static string SomeValue { get; set; }
}

Решарпер говорит мне, что Super.Inner.SomeValue скрывает свойство от внешнего класса.

Как происходит скрытие?У вас есть две разные ссылки (Super.SomeValue и Super.Inner.SomeValue).И (насколько мне известно) вы не можете использовать одну ссылку для обозначения другой переменной.

Я обнаружил, что Решарпер иногда ошибается.Но не обычно.Так что я хотел бы знать, что он думает здесь.

Есть идеи?

1 Ответ

33 голосов
/ 18 января 2012

Я предполагаю, потому что это означает, что использование SomeValue во внутреннем классе означает, что вы получите значение, присвоенное внутреннему классу, а не внешнему классу.

Учтите это:

public static class Super
{
  public static class Sub
  {
    public static string OtherValue {get{return SomeValue;}}

    // Remove this line and OtherValue will return Outer
    public static string SomeValue { get{return "Inner"; }}
  }

  public static string SomeValue { get{return "Outer"; }}
}

В настоящее время Super.Sub.OtherValue вернет Inner, но удаление строки, которую я прокомментировал, приведет к возврату Outer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...