强制一个变量只能赋值一次
Enforce that a variable can be assigned only once
假设我在 class:
中有这段代码
String _str;
String get str => _str;
void set(String s) {
assert(_str == null);
_str = s;
}
如何确保只有 setter 和 getter 可以访问 _str?这是为了防止同一 class 中的任何内容都无法绕过该条件。
没有办法。在 Dart 中,隐私是每个库的。一个库中的所有内容都可以 read/write 该库中的所有其他内容。
我会去
String __str;
String get str => __str;
void set(String s) {
assert(__str == null);
__str = s;
}
并且永远不要访问以两个下划线开头的成员,关联的 getter/setter 对除外。
当我想要一个带有 private getter setter like
的私有字段时,我有时会这样做
String __str;
String get _str => __str;
void _set(String s) {
assert(_str == null);
__str = s;
}
一个奇怪的解决方法是在另一个库中创建一个 class,例如
class StringProperty {
String _str;
String get value => _str;
void set value(String s) {
assert(_str == null);
_str = s;
}
}
然后像
一样在您的图书馆中使用它
final StringProperty str = new StringProperty();
然后您可以访问该值然后喜欢
str.value = 'abc';
print(str.value);
除此之外别无他法。
假设我在 class:
中有这段代码String _str;
String get str => _str;
void set(String s) {
assert(_str == null);
_str = s;
}
如何确保只有 setter 和 getter 可以访问 _str?这是为了防止同一 class 中的任何内容都无法绕过该条件。
没有办法。在 Dart 中,隐私是每个库的。一个库中的所有内容都可以 read/write 该库中的所有其他内容。
我会去
String __str;
String get str => __str;
void set(String s) {
assert(__str == null);
__str = s;
}
并且永远不要访问以两个下划线开头的成员,关联的 getter/setter 对除外。 当我想要一个带有 private getter setter like
的私有字段时,我有时会这样做String __str;
String get _str => __str;
void _set(String s) {
assert(_str == null);
__str = s;
}
一个奇怪的解决方法是在另一个库中创建一个 class,例如
class StringProperty {
String _str;
String get value => _str;
void set value(String s) {
assert(_str == null);
_str = s;
}
}
然后像
一样在您的图书馆中使用它final StringProperty str = new StringProperty();
然后您可以访问该值然后喜欢
str.value = 'abc';
print(str.value);
除此之外别无他法。