Krokizo Ответов: 3

Борьба с наследованием в ООП


Я пытаюсь немного попрактиковаться в ООП, но, кажется, чего-то не понимаю. Вот мой родительский класс:
class Human
    {
        public string name;
        public int age;

        public Human(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public string Name
        {
            get { return name; }
            set { this.name = value; }
        }
        public int Age
        {
            get { return age; }
            set { this.age = value; }
        }


А вот и мой детский класс :
class Student:Human
    {
        private string speciality;
        private int facultynumber;

        public Student(string speciality, int facultynumber)
            : base(name,age)
        {
            this.facultynumber = facultynumber;
            this.speciality = speciality;
        }

        public string Speciality
        {
            get { return speciality; }
            set { this.speciality = value;}
        }
        public int Facultynumber
        {
            get { return facultynumber; }
            set { this.facultynumber = value; }
        }


Почему он выдает мне ошибку на базе: ссылка на объект требуется для доступа к нестатическому члену

Что я уже пробовал:

Я действительно не знаю, что делать...

3 Ответов

Рейтинг:
22

Wastedtalent

Вы должны передать все параметры студенту:

public Student(string name, int age, string speciality, int facultynumber)
            : base(name,age)
        {
            this.facultynumber = facultynumber;
            this.speciality = speciality;
        }


Кроме того, подумайте о том, чтобы сделать поля имени/возраста в классе human защищенными или закрытыми.


Рейтинг:
2

Animesh Datta

Привет ,
вы не можете этого сделать . Это может быть

public Student(string name, int age, string speciality, int facultynumber)
            : base("SomeName",10)

или
это может быть
public Student(string speciality, int facultynumber)
              : base(speciality, facultynumber)

Спасибо


Рейтинг:
1

Tabish Mateen

это проблемный код

public Student(string speciality, int facultynumber)
    : base(name,age)
{
    this.facultynumber = facultynumber;
    this.speciality = speciality;
}



потому что вы пытаетесь передать переменные родительского класса в качестве параметра в конструкторе родительского класса.

Попробуйте использовать, проверить жестко закодированные значения, чем это должно работать (например, "тест", 1)