如何在带有私有变量的dart构造函数中使用它

Eli*_*sek 3 dart flutter

当我尝试在dart中创建构造函数时,Student(this._name)它不适用于私有变量。

我已经尝试过使用setters,但是它也不起作用。

    class Student{

    var _id;
    var _name;

    Student(this.id, this.name);

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;

    }
Run Code Online (Sandbox Code Playgroud)

awa*_*aik 9

您可以使用这个符号

class Student {
  String _id;
  String _name;

  Student({required String id, required String name})
      : _id = id,
        _name = name;
}
Run Code Online (Sandbox Code Playgroud)


Gün*_*uer 5

不支持此功能,因为它会将私有实现暴露给外部。

如果重命名var _id;var _userId;您,则仅重命名一个私有字段就会破坏使用您的类的代码。
请改为在我的答案下方查看评论。

  class Student{

    var _id;
    var _name;

    Student({this._id, this._name}); // error

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;
  }
Run Code Online (Sandbox Code Playgroud)

另类

  class Student{

    var _id;
    var _name;

    Student({int id, String name}) : _id = id, _name = name;

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;
  }
Run Code Online (Sandbox Code Playgroud)

  • 不允许使用私有名称的参数的原因是,您不能从其他库中对其进行“调用”。如果声明`foo({int _x}){...}`,则其他任何库都不能提供该参数,因为`foo(_x:42)`是另一个库中的另一个名称。对于实例方法,没有其他库能够覆盖这些方法。因此,通常,命名参数不允许具有私有名称。(这不是因为更改名称会破坏任何人,因为没有人可能会完全使用该名称)。 (2认同)