📜  dart 无法在初始化程序中访问实例成员“用户”.尝试用不同的表达式替换对实例成员的引用 - Dart (1)

📅  最后修改于: 2023-12-03 15:00:20.447000             🧑  作者: Mango

Dart 无法在初始化程序中访问实例成员“用户”

在Dart中,无法在初始化程序中访问实例成员(Instance member),例如:

class User {
  String name;
  
  User(this.name) {
    print(name); // 在初始化程序中访问实例成员,会报错。
  }
}

上述代码会报错:Dart 无法在初始化程序中访问实例成员“name”。 这是因为在Dart中,初始化程序是在对象构造之前执行的,而实例成员必须在对象构造之后才能访问。

要解决这个问题,可以使用初始化列表(Initializer list)来初始化实例成员,例如:

class User {
  final String name;
  
  User(this.name);
}

void main() {
  User user = User('John');
  print(user.name);
}

在上述代码中,我们将name声明为final类型,然后使用构造函数的参数来初始化它。这样,就可以避免在初始化程序中访问实例成员引发的错误。

另外,如果需要在初始化程序中使用实例成员,可以考虑将它们声明为static类型,这样就可以在初始化程序中访问它们了,例如:

class User {
  static String name;
  
  User() {
    print(User.name);
  }
}

void main() {
  User.name = 'John';
  User user = User();
}

在上述代码中,我们将name声明为static类型,然后在main函数中给它赋值。在User类的构造函数中,通过User.name访问了name实例成员。