Tho*_*ard 10 privileges private subclass dart
我在 Dart 中有两个类,MyClass1 和 MyClass2,其中 MyClass2 扩展了 MyClass1。在某些 MyClass2 函数中,我想访问在 MyClass1 中具有“私有”访问权限的变量。如果 MyClass1 和 MyClass2 在同一个 dart 文件中声明,如下所示:
class MyClass1 {
double _myprivatevar;
}
class MyClass2 extends MyClass1 {
MyClass2(double myvar){
this._myprivatevar = myvar;
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很好但是现在,如果 MyClass2 在它自己的 dart 文件中声明:
import 'package:test/myclass1.dart';
class MyClass2 extends MyClass1 {
MyClass2 (double myvar){
this._myprivatevar = myvar;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个错误说:
没有为类“MyClass2”定义设置器“_myprivatevar”。尝试导入定义 '_myprivatevar' 的库,将名称更正为现有 setter 的名称,或者定义名为 '_myprivatevar'.dart(undefined_setter) 的 setter 或字段
如何解决这个问题并从另一个 dart 文件中定义的子类访问父私有变量?
您无法直接从不同的库访问私有名称,并且 Dart 没有任何与“受保护”(从子类访问)相对应的隐私符号。
您必须将属性公开,在同一个库中声明两个类,或者不从子类访问该属性。没有其他选择。
如果您唯一的问题是初始化实例变量,那么您也许可以将该变量的值作为构造函数参数传递给超类,从而让超类为您访问该变量:
class MyClass1 {
double _myPrivateVar;
MyClass1([double myPrivateValue]) : _myPrivateVar = myPrivateValue;
}
// In different library:
class MyClass2 extends MyClass1 {
MyClass2(double myVar) : super(myVar);
}
Run Code Online (Sandbox Code Playgroud)
这不会帮助您稍后读取私有变量,它仍然只有超类和同一库中的其他代码可以访问该变量。
小智 6
您可以为此使用@protected 注释。
class MyClass1 {
double _myprivatevar;
@protected double get myprivatevar => _myprivatevar;
@protected set myprivatevar(newValue) {
_myprivatevar = newValue;
}
}
class MyClass2 extends MyClass1 {
MyClass2(double myvar){
myprivatevar = myvar;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11004 次 |
| 最近记录: |