Просто замеченный одно учебное руководство, говоря, что:
Class Dog
{
private string Name;
}
Class SuperDog:Dog
{
private string Mood;
}
Затем было отображение UML, что SuperDog наследует Имя также. Я попробовал, но мне кажется, что только общедоступные участники наследованы. По крайней мере, я не мог получить доступ к Имени, если оно не было объявлено как общественность.
Член базового класса должен быть как минимум защищен, чтобы его можно было видеть в производном классе.
Закрытые члены недоступны потомкам класса.
Я не уверен во всех модификаторах доступа, но на самом базовом уровне доступны только публичные и защищенные члены.
попробуйте ключевое слово protected вместо public / private:
http://msdn.microsoft.com/en-us/library/bcd5672a (VS.71) .aspx
Как уже было сказано другими, частные члены наследуются. Доступ к членам - это другая тема, но не совсем отдельная с точки зрения наследования. Важно понимать, что все члены наследуются независимо от модификатора доступа, потому что это влияет на размеры подклассов. Рассмотрим следующий код.
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.
Да, хотя наследники не могут получить доступ к этому члену.
Если вы считаете, что они смогут получить к нему доступ, объявите его защищенным.
Нет, это не так.
Модификатор protected
может сделать поля доступными для производных классов, но это обычно считается плохой идеей с точки зрения обслуживания. Вместо этого лучше использовать защищенные свойства.
SuperDog унаследует поле Name, да.
SuperDog НЕ будет иметь доступ к полю, однако, поэтому практического применения (в том, что касается SuperDog) нет.
Все от базового класса наследуется в производном классе. члены помеченные как частные, недоступны для производным классам в целях целостности, если вам нужно сделать их доступными в производном классе, пометьте члены как защищенные.
Существуют различные уровни доступности членов в контексте наследования.
public
: все открытые члены базового класса доступны внутри производного класса и экземплярам производного класса.
protected
: все защищенные члены базового класса доступны внутри производного класса и не доступны экземплярам производного класса.
protected internal
: все защищенные внутренние члены базового класса доступны внутри производного класса и экземплярам производного класса, созданным в той же сборке.
internal
: все внутренние члены базового класса доступны в производном классе и экземплярам производного класса, созданным в той же сборке.
private
: никакие приватные члены базового класса не доступны в производном классе и экземплярам производного класса.
Производный класс имеет доступ к общедоступные, защищенные, внутренние и защищенные внутренние члены базы класс. Хотя производный класс наследует частные члены базы class, он не может получить доступ к этим членам. Однако все эти частные члены все еще присутствует в производном классе и могут делать ту же работу, что и в сам базовый класс. Например, предположим, что защищенный базовый класс метод обращается к частному полю. Что поле должно присутствовать в производном класс для унаследованной базы метод класса для правильной работы.
Источник: http://msdn.microsoft.com/en-us/library/ms173149.aspx
Так что технически да, но практически нет.
Да, они наследуются. Но вы не можете получить к ним доступ, так как они приватные :).
Сделайте имя защищенным
или общедоступным
вместо этого, это будет доступно. Закрытые члены недоступны из производных классов
Да, но они недоступны, так что глядя на это можно честно сказать, что они не наследуются. Но да, они действительно есть