Dart -创建新对象更改旧对象

iklwldmw  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(91)

在DartPad中运行这个,为什么对象a会被相同对象类型的后续声明和示例化更新?如何防止第一个对象被更新?

void main() {
  SampleClass a = SampleClass(publicParam: 'A');
  print('1. a: ${a.getPrivateProperty}');

  SampleClass b = SampleClass(publicParam: 'B');
  print('2. a: ${a.getPrivateProperty}');
  print('3. b: ${b.getPrivateProperty}');

  SampleClass(publicParam: 'C');
  print('4. a: ${a.getPrivateProperty}');
  print('5. b: ${b.getPrivateProperty}');
}

class SampleClass {
  final String publicParam;
  static late String _privateProperty;

  SampleClass({
    required this.publicParam,
  }) {
    _privateProperty = publicParam;
  }

  // Getter
  String get getPrivateProperty => _privateProperty;
}

字符串
输出量:

1. a: A
2. a: B
3. b: B
4. a: C
5. b: C


有没有人可以帮我尽可能详细的?非常感谢我认为这与构造函数有关,但我真的不确定。

dgsult0t

dgsult0t1#

原因是您的_privateProperty属性是static,这意味着它在类的所有示例中共享。
我不知道你拥有另一个私有属性的动机,但假设你需要它,我会像这样重写你的类:

class SampleClass {
  final String publicParam;

  final String _privateProperty;

  SampleClass({
    required this.publicParam,
  }) : _privateProperty = publicParam;

  // Getter
  String get getPrivateProperty => _privateProperty;
}

字符串

相关问题