Наследование дротиков: как назначить все свойства родительского класса ребенку - PullRequest
0 голосов
/ 03 марта 2019

У меня есть два класса: Person и Student.Student расширяется Person.Когда Person регистрируется как Student, присваиваются новые свойства Student.Я хочу передать все достоинства личности ученику.Для этого я создал собственный конструктор: Student.fromPerson(Person person) Однако у класса Person есть так много свойств, и когда разработчики добавляют свойство Person, они также должны обновить этот конструктор в Student.Есть ли способ автоматически приписать свойства человека своему суперклассу, так как это тот же тип, без записи: : super(fname: person.fname, lname: person.lname); и перечисления всех свойств?

class Person {
  String fname;
  String lname;

  Person({this.fname, this.lname});
}

class Student extends Person {
  String major;
  String year;

  Student({this.major, this.year, String fname, String lname})
      : super(fname: fname, lname: lname);

  Student.fromPerson(Person person, {this.major, this.year})
      : super(fname: person.fname, lname: person.lname); // <- is there a better way

}

void main() {
  Person person = Person(fname: "Lina", lname: "Dosse");
    Student student = Student.fromPerson(person, major: 'CS', year: '2015');
}

1 Ответ

0 голосов
/ 04 марта 2019

Не существует единого подхода, который бы работал везде.На виртуальной машине вы могли бы использовать dart:mirrors, чтобы отразить поля Person, но это не будет работать в Интернете или во флаттере.Вы также можете использовать codegen для генерации стандартного кода, который копирует поля, но я не знаю ни одного из существующих компоновщиков, которые делают это, поэтому вам придется реализовать его самостоятельно.(См. https://github.com/dart-lang/build/tree/master/docs, если вы хотите попробовать этот маршрут).

Лучшим подходом может быть изменение модели.Вместо того, чтобы моделировать его с Student , равным a Person, вы можете попробовать Student с a Person.

class Student {
    Person person;
    String major;
    String year;

    Student({this.person, this.major, this.year});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...