Проблемы с наследованием в C#
я только изучаю C#, не нашёл ответ на первой странице Google поэтому создаю вопрос.
Насколько я понял, protected поля данных родительских классов должны наследоваться их производными. Я начал пытаться реализовать это на практике:
class Program
{
class Human
{
string Name; //В видео из интернета которое я смотрел, всё работало
}
class Student: Human
{
}
static void Main(string[] args)
{
Student a = new Student();
a.Name = "Nikolay";
}
}
Результат: Ошибка CS0122 'Program.Human.Name" недоступен из-за его уровня защиты.
Насколько я понял, если не указано иное, поле класса создаётся с модификатором private (что и происходит в листинге). Однако, подстановка protected не решает моей проблемы, и в видео из интернета, с которого я копировал код, всё работало без спецификации поля данных.
Я буду очень благодарен, если бы вы указать на мою ошибку. Я хотел бы заставить программу наследовать поля данных от родительского класса.
Ответы (2 шт):
Вы немного путаете уровни доступа к полям класса. protected это значит доступно внутри потомка, а не так как у вас. Вы пытаетесь получить с наружи в программе доступ как public свойство. Поле protected Name в вашем случае доступно внутри Student, а не в Program
class Human {
private string PrivateName = "Private Name";
protected string ProtectedName = "Protected Name";
public string PublicName = "Public Name";
public void PrintPrivateName () {
print(PrivateName);
}
}
class Student: Human {
public void PrintProtectedName () {
print(ProtectedName);
}
}
static void Main (string[] args) {
Student NewStudent = new Student();
NewStudent.PrintPrivateName();
NewStudent.PrintProtectedName();
print(NewStudent.PublicName);
}