Члены парламента, не занимающие официального поста наследованы в C#?

Просто замеченный одно учебное руководство, говоря, что:

Class Dog
{
  private string Name;
}
Class SuperDog:Dog
{
 private string Mood;
}

Затем было отображение UML, что SuperDog наследует Имя также. Я попробовал, но мне кажется, что только общедоступные участники наследованы. По крайней мере, я не мог получить доступ к Имени, если оно не было объявлено как общественность.

57
задан John Saunders 1 June 2010 в 15:58
поделиться

12 ответов

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

0
ответ дан 7 November 2019 в 05:46
поделиться

Закрытые члены недоступны потомкам класса.

Я не уверен во всех модификаторах доступа, но на самом базовом уровне доступны только публичные и защищенные члены.

0
ответ дан 24 November 2019 в 19:15
поделиться

попробуйте ключевое слово protected вместо public / private:

http://msdn.microsoft.com/en-us/library/bcd5672a (VS.71) .aspx

0
ответ дан 24 November 2019 в 19:15
поделиться

Как уже было сказано другими, частные члены наследуются. Доступ к членам - это другая тема, но не совсем отдельная с точки зрения наследования. Важно понимать, что все члены наследуются независимо от модификатора доступа, потому что это влияет на размеры подклассов. Рассмотрим следующий код.

public class Foo
{
  private int a;
  public int b;
}

public class Bar : Foo
{
  private int c;
  public int d;
}

Foo будет занимать 16 байт на куче. 4 для синхроблока, 4 для информации о типе (таблица методов), и по 4 для переменных int, итого 12. Bar, с другой стороны, будет занимать 24 байта. 4 для синхроблока, 4 для информации о типе (таблица методов), по 4 для полей int, унаследованных от Foo, и по 4 для полей int в Bar - всего 24.

0
ответ дан 24 November 2019 в 19:15
поделиться

Да, хотя наследники не могут получить доступ к этому члену.

Если вы считаете, что они смогут получить к нему доступ, объявите его защищенным.

1
ответ дан 24 November 2019 в 19:15
поделиться

Нет, это не так.

Модификатор protected может сделать поля доступными для производных классов, но это обычно считается плохой идеей с точки зрения обслуживания. Вместо этого лучше использовать защищенные свойства.

1
ответ дан 24 November 2019 в 19:15
поделиться

SuperDog унаследует поле Name, да.

SuperDog НЕ будет иметь доступ к полю, однако, поэтому практического применения (в том, что касается SuperDog) нет.

19
ответ дан 24 November 2019 в 19:15
поделиться

Все от базового класса наследуется в производном классе. члены помеченные как частные, недоступны для производным классам в целях целостности, если вам нужно сделать их доступными в производном классе, пометьте члены как защищенные.

Существуют различные уровни доступности членов в контексте наследования.

public: все открытые члены базового класса доступны внутри производного класса и экземплярам производного класса.

protected: все защищенные члены базового класса доступны внутри производного класса и не доступны экземплярам производного класса.

protected internal: все защищенные внутренние члены базового класса доступны внутри производного класса и экземплярам производного класса, созданным в той же сборке.

internal: все внутренние члены базового класса доступны в производном классе и экземплярам производного класса, созданным в той же сборке.

private: никакие приватные члены базового класса не доступны в производном классе и экземплярам производного класса.

47
ответ дан 24 November 2019 в 19:15
поделиться

Производный класс имеет доступ к общедоступные, защищенные, внутренние и защищенные внутренние члены базы класс. Хотя производный класс наследует частные члены базы class, он не может получить доступ к этим членам. Однако все эти частные члены все еще присутствует в производном классе и могут делать ту же работу, что и в сам базовый класс. Например, предположим, что защищенный базовый класс метод обращается к частному полю. Что поле должно присутствовать в производном класс для унаследованной базы метод класса для правильной работы.

Источник: http://msdn.microsoft.com/en-us/library/ms173149.aspx

Так что технически да, но практически нет.

103
ответ дан 24 November 2019 в 19:15
поделиться

Да, они наследуются. Но вы не можете получить к ним доступ, так как они приватные :).

0
ответ дан 24 November 2019 в 19:15
поделиться

Сделайте имя защищенным или общедоступным вместо этого, это будет доступно. Закрытые члены недоступны из производных классов

0
ответ дан 24 November 2019 в 19:15
поделиться

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

-1
ответ дан 24 November 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: