Проблемы с наследованием в 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 шт):

Автор решения: Aziz Umarov

Вы немного путаете уровни доступа к полям класса. protected это значит доступно внутри потомка, а не так как у вас. Вы пытаетесь получить с наружи в программе доступ как public свойство. Поле protected Name в вашем случае доступно внутри Student, а не в Program

→ Ссылка
Автор решения: Yaroslav
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);
}
→ Ссылка