Наследуются ли частные переменные уровня класса?

Просто интересно узнать, унаследованы ли частные переменные уровня класса? В С#

Ответ 1

Да, но они недоступны, поэтому, глядя на него, вы можете честно сказать, что они не наследуются. Но да, они действительно

Ответ 2

Они наследуются, но ключевое слово "private" означает, что к ним может обращаться только класс, в котором они были объявлены. Это исключает подклассы. Однако, поскольку экземпляр подкласса содержит свой собственный суперкласс, они все еще существуют. Вы просто не можете видеть их напрямую.

Если вы ищете поле, которое может видеть только класс объявления и его подклассы, вы можете использовать ключевое слово "protected" вместо "private", и это должно обеспечить функциональность, которую вы ищете.

Ответ 3

Они наследуются в одном смысле. Для них выделяется пространство памяти, и они "существуют" внутри экземпляра подкласса. Однако подкласс не может получить доступ к самой переменной. (Если вы хотите, чтобы подкласс получал доступ к переменной базового класса, используйте protected вместо private.)

Это необходимо. Методы внутри базового класса должны иметь возможность устанавливать приватную переменную (или использовать ее для нее не нужно). Эти методы также доступны в экземпляре подкласса - и на самом деле экземпляр подкласса должен быть обработан как экземпляр базового класса (требуется для удовлетворения Принцип замены Лискова). Если частные переменные не были унаследованы, поведение методов базового класса изменилось бы или нарушилось.

Ответ 4

Это зависит от языка, но в общем случае нет - они доступны только в классе, в котором они определены.

Ответ 5

Они, хотя они не доступны напрямую.

public class BaseClass
{
    private const int _aNumber = 5;
    public int ReturnANumber() { return _aNumber; }
}

public class DClass : BaseClass
{
    public void SomeMethod()
    {
        // This is indirectly accessing a private implemented in the class
        // this derives from, but existing inside this class.
        int numbery = this.ReturnANumber();
    }
}

public class Whatever
{
    public void AMethod(DClass someDClass)
    {
        int thisIsNumberFive = someDClass.ReturnANumber();
    }
}

Ответ 6

Да, они наследуются, но компилятор запрещает их доступ. Aalas, вы все равно можете получить их - не рекомендуется - через отражение или через ваш приятный трюк AMethod().

Ответ 7

Они наследуются, но недоступны или доступны только в классе, в котором они объявлены. Вы можете получить доступ к ним в подклассе двумя способами.

  • Объявить их защищенными, а не частными
  • напишите открытый метод, который возвращает значение этой частной переменной

    но вы не можете напрямую обращаться к частной переменной в подклассе.