gpt4 book ai didi

dart - 子类应该继承 Dart 中的私有(private) mixin 变量吗?

转载 作者:行者123 更新时间:2023-12-05 02:11:16 30 4
gpt4 key购买 nike

我应该得到以下错误吗:

class.dart:11:11: Error: The getter '_privateID' isn't defined for the class 'Y'. - 'Y' is from 'class.dart'. Try correcting the name to the name of an existing getter, or defining a getter or field named '_privateID'.

来自以下代码?

mixin.dart:

class Mixin {
static int _nextID = 0;

int publicID = _nextID++; // I only need one of these lines
int _privateID = _nextID++; // but this variable is inaccessible
}

class.dart:

import 'mixin.dart';

class X with Mixin {
void run() {
print(publicID); // no error here
}
}

class Y with Mixin {
void run() {
print(_privateID); // Error: _privateID not defined
}
}

void main() {
Y().run();
}

或者这是一个错误?如果不是错误,我想了解为什么这种行为是合理的。

当我改为在与上述类相同的文件中定义 mixin 时,我没有收到任何错误。

(Dart SDK 2.4.1.)

最佳答案

这不是错误。私有(private)字段是继承的,但您无法访问它,因为它的名称对不同的库是私有(private)的。

Dart 的“隐私”概念是库私有(private)名称mixin.dart 库中的名称_privateID 引入了一个库私有(private)名称。这个名字的特殊之处在于它只能写在同一个库中。如果有人在不同的库中编写 _privateID,它是一个不同的名称,而是该库唯一的名称。

就好像私有(private)名称包含了它所在库的库URI,所以你真正声明的是一个名称_privateID@mixin.dart。当你试图读取 class.dart 中的那个字段时,你写了 ._privateID,但是因为它在不同的库中,所以你真正写的是 ._privateID @class.dart,一个完全不同的名字,类没有任何声明那个名字。

因此,如果一个类需要访问另一个类(或 mixin 或任何其他类)的私有(private)成员,则需要在同一个库中声明这两个类,否则它们甚至无法编写该变量的名称。

这就是为什么如果您在同一个库中编写 mixin,代码就可以工作的原因。如果你想将 mixin 移动到一个单独的文件,但不一定是一个单独的库,你可以使用 part file .

关于dart - 子类应该继承 Dart 中的私有(private) mixin 变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57798124/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com