繁体   English   中英

命名继承的构造函数,不在dart中接受参数

[英]Named inherited constructor not taking arguments in dart

我试图继承一个带有命名构造函数的dart类,我想通过子类使用super和命名构造函数将数据传递给父类。

我尝试了很多变化,但这应该根据文档工作。 我正在使用Dart 2.0。 注意:如果我有一个参数而不是命名构造函数,它可以工作。

class Person {

  String firstname;
  String lastname;
  String city;

//empty constructor
  Person();

//named constructors
  Person.setfirstlast(String firstname, String lastname);

//setters and getters ...
}

class Worker extends Person{

  String company;
  String title;
  double salary;
  String _memo;

  //empty constructor
  Worker(){
    _memo = "Great Worker";
  }

  //create named constructor  - WHY WILL SUPER.setfirstlast NOT WORK?

  Worker.setWorkerInfo( this.company, this.title, this.salary) :
     super.setfirstlast(firstname, lastname)
  {
      _memo = "Great Worker"; 
  } 
  //setters and getters ...
}

这是错误消息。

字符串firstname只能访问静态成员

initializers.dart(implicit_this_reference_in_initializer)

String lastname只能访问静态成员

initializers.dart(implicit_this_reference_in_initializer)

提前致谢!


** 答案 **

对于那些感兴趣的人,我找到了解决方案,这就是你编码的方式。 Dart声明构造函数而不是继承,但也包括super。

1分钟的解释是,您实际上在子项中创建了一个新的构造函数,其中包含基类中的字段。 注意,您对子字段使用“this”,并在实际构造函数中使用数据类型和占位符作为继承字段。 在这种情况下,String fn和String ln。 占位符然后通过超级带来。

  Worker.setWorkerInfo( this.company, this.title, this.salary, String fn, String ln) :
     super.setfirstlast(fn, ln)
  {
      _memo = "Great Worker"; 
  } 

super.setfirstlast(firstname, lastname)引用firstnamelastname 这些不是 Worker.setWorkerInfo构造函数的参数,并且它们不在周围的词法范围中声明,因此它们隐式引用this.firstnamethis.lastname

你不能在构造函数初始化列表中引用this ,这是错误试图告诉你的......只是不是很成功,因为它不会告诉你你在做什么,只是你必须做的事情。

您可能希望将String firstname, String lastname作为参数添加到Worker.setWorkerInfo构造函数中。

它与构造函数碰巧被命名的问题无关。 对于未命名的构造函数,也会出现同样的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM