尝试使用get关键字在dart中执行setter和getter
我在写这门课,注意到你可以在小事情上使用anon函数设计尝试使用get关键字在dart中执行setter和getter,dart,Dart,我在写这门课,注意到你可以在小事情上使用anon函数设计 String get fullName => "$fname $lname"; //A 我开始思考我是应该用这种方式还是标准来做我的二传手和接球手: void setFullName( String fn, String ln ) { //B fname = fn; lname = ln; } String getFullName(){ //C return "$fname $lname"; }
String get fullName => "$fname $lname"; //A
我开始思考我是应该用这种方式还是标准来做我的二传手和接球手:
void setFullName( String fn, String ln ) { //B
fname = fn;
lname = ln;
}
String getFullName(){ //C
return "$fname $lname";
}
我知道A
和C
之间的区别在于一个是方法,而另一个不是
print(fullName);
// vs
print(getFullName());
那么,哪种方法是最好的。我在读一个演示,它说anon函数实际上只应该在函数有理由更改时使用。我个人认为getter应该是传统意义上的函数,但有些事情很简单,只需进行速记即可
如果有一个getter的速记,就像我写的
a
,那么有一个setter的速记吗?Dart中的第一个字段由getter和setter自动包装。如果使用反射(镜像)查询类的成员,则会得到getter和setter,而不是字段。这也反映在省道样式指南中: 为了确保这一点,不要用getter/setter包装字段 您可以随时将字段更改为getter/setter,而不会破坏使用您的类的代码 对于GETS/SETTER,需要考虑的其他事项是:它们不应该做昂贵的计算,并且不应该有副作用(除了在调用SETER时设置后退字段)。< / P> 如果满足这些条件(并且您不需要额外的参数),那么使用getter/setter通常是一个好主意 注意:简写函数表示法不仅限于getter/setter,它们也不需要它。您也可以将其用于函数,也可以将块体用于getter/setter
bool _isSet;
bool get isSet {
return _isSet;
}
set isSet(bool value) {
if(value is null) {
throw new ArgumentError();
}
_isSet = value;
}
你像这样使用它们
var myClass = new MyClass();
myClass.isSet = true; // setter
print(myClass.isSet); // getter
不必要的接受者 从样式指南中: 为了“安全”,避免在getter和setter中包装字段 在Java和C#中,通常会将所有字段隐藏在getter和setter(或C#中的属性)后面,即使实现只是转发到字段。这样,如果您需要在这些成员中做更多的工作,您可以不必接触呼叫站点。这是因为调用getter方法与访问Java中的字段不同,访问属性与访问C#中的原始字段不兼容 Dart没有这个限制。字段和getter/setter是完全不可区分的。您可以在类中公开一个字段,然后将其包装到getter和setter中,而无需接触使用该字段的任何代码
很高兴知道。因此,在我的示例中,fname自动有一个getter和setter?所以,如果我想通过函数调用在类的作用域之外访问它们,我可以说什么<代码>类Person{}Person p=newperson();p、 fname(姓名)代码>还是什么?我不喜欢公开变量,比如:
p.fname=name代码>我在使用Dartpad时注意到,即使它被指定为变量,也可以从类中公开访问它以进行指定。有没有办法使它们成为私有的或受保护的?我知道根据信息,它说\uu
是用来表示私有变量的。。。。虽然它们现在不是真正的私有,是吗?哦,在堆栈溢出中找到的。谢谢我把它链接到这里。我更新了我的答案。在Dart中,通过以下划线(\uuu
)开头的名称使字段、getter/setter和函数/方法成为私有的。读取和设置getter/setter与字段相同(请参阅我的更新)。