如何在带有私有变量的dart构造函数中使用此函数
当我尝试在dart中创建一个构造函数时,比如如何在带有私有变量的dart构造函数中使用此函数,dart,flutter,Dart,Flutter,当我尝试在dart中创建一个构造函数时,比如Student(this.\u name),它不能处理私有变量 我已经尝试过使用setter,但它也不起作用 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;
Student(this.\u name)
,它不能处理私有变量
我已经尝试过使用setter,但它也不起作用
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;
}
这是不受支持的,因为它将向外部公开私有实现 如果您要重命名
var\u id代码>到var\u用户id代码>只需重命名一个私有字段,就可以破坏使用类的代码。
请看我回答下面的评论
替代方案
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;
}
当然可以。这不仅是因为您将它们设置为可选的命名参数(Student({this.\u id,this.\u name});
是不允许的)好的,所以在使用可选命名参数的情况下,我必须在构造函数体中设置变量?请参阅我的答案。一些提示。使用适当的字段类型,而不是var
<对于声明时初始化的局部变量,code>var
可以。如果私有字段不包含其他逻辑,则不要对其使用公共getter/setter。您可以随时用getter/setter替换字段,反之亦然,而无需中断代码的用户。不允许使用私人命名的参数的原因是您不能从其他库调用它们。如果声明foo({int\u x}){…}
则其他库不能提供该参数,因为foo({int\u x:42)
在不同的库中是不同的名称。例如,没有其他库能够重写这些方法。因此,一般情况下,命名参数不允许有私有名称。(这并不是因为更改名称会破坏任何人,因为根本没有人可能会使用该名称)。对于此解决方案是否是惯用的Dart,是否有任何评论?Dart中的语言选择似乎有意避免向消费者隐藏成员(例如依赖项)
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;
}