Dart将其作为构造函数中的参数传递

Dart将其作为构造函数中的参数传递,dart,interface,abstract,Dart,Interface,Abstract,假设我有一个抽象类 abstract class OnClickHandler { void doA(); void doB(); } 我有一节课 class MyClass { OnClickHandler onClickHandler; MyClass({ this.onClickHandler }) void someFunction() { onClickHandler.doA(); } } class Main impleme

假设我有一个抽象类

abstract class OnClickHandler {
    void doA();
    void doB();
} 
我有一节课

class MyClass {

  OnClickHandler onClickHandler;

  MyClass({
   this.onClickHandler
  })

  void someFunction() {
  onClickHandler.doA();
  }

}
class Main implements onClickHandler {

  // This throws me an error
  MyClass _myClass = MyClass(onClickHandler = this);  // <- Invalid reference to 'this' expression

  @override
  void doA() {}

  @override
  void doB() {}
}
我有一节课

class MyClass {

  OnClickHandler onClickHandler;

  MyClass({
   this.onClickHandler
  })

  void someFunction() {
  onClickHandler.doA();
  }

}
class Main implements onClickHandler {

  // This throws me an error
  MyClass _myClass = MyClass(onClickHandler = this);  // <- Invalid reference to 'this' expression

  @override
  void doA() {}

  @override
  void doB() {}
}
class Main实现onClickHandler{
//这让我犯了一个错误

MyClass _MyClass=MyClass(onClickHandler=this);//您的问题是,由于对象仍在创建中,因此此
尚不存在。Dart对象的构造分两个阶段完成,这可能很难理解

如果您将程序更改为以下内容,它将起作用:

abstract class OnClickHandler {
  void doA();
  void doB();
}

class MyClass {
  OnClickHandler onClickHandler;

  MyClass({this.onClickHandler});

  void someFunction() {
    onClickHandler.doA();
  }
}

class Main implements OnClickHandler {
  MyClass _myClass;

  Main() {
    _myClass = MyClass(onClickHandler: this);
  }

  @override
  void doA() {}

  @override
  void doB() {}
}

原因是在
{}内运行的代码构造函数中的
是在创建对象本身之后,但在从构造函数返回对象之前执行的。

您的问题是,由于对象仍在创建中,该还不存在。Dart对象的构造分两个阶段完成,这可能很难理解

如果您将程序更改为以下内容,它将起作用:

abstract class OnClickHandler {
  void doA();
  void doB();
}

class MyClass {
  OnClickHandler onClickHandler;

  MyClass({this.onClickHandler});

  void someFunction() {
    onClickHandler.doA();
  }
}

class Main implements OnClickHandler {
  MyClass _myClass;

  Main() {
    _myClass = MyClass(onClickHandler: this);
  }

  @override
  void doA() {}

  @override
  void doB() {}
}
原因是,在构造函数中的
{}
内部运行的代码是在创建对象本身之后,但在从构造函数返回对象之前执行的