有没有办法使用mixin访问类中mixin的私有变量?

时间:2021-03-25 19:43:10

标签: dart

在 dart 中创建 mixin 时,您可以像类一样声明属性和方法。在声明私有属性/方法时,继承类似乎也应该有权访问此私有成员(例如参见下文)。

有没有办法使用 mixin 访问类中 mixin 的私有变量?

如果不可能,我如何在 mixin.dart 对象中声明一个成员,但在继承类的接口中将其设为私有。

mixin A { String propertyOne = '1'; // This property is not accessible to any inheriting class. int _privateProperty = 2; }
class.dart
class B with A { String get mixinString => propertyOne; // This property is not accessible to the B class. int get mixinInt => _privateProperty; }
{{1}}

1 个答案:

答案 0 :(得分:2)

没有。库私有的属性意味着您只能在同一个库中表达它的名称。在任何其他库中,标识符 _privateProperty 是一个不同的名称,是该其他库的私有名称。

如果您不能在同一个库中同时声明 mixin 和 class,并且您肯定需要访问该属性,那么您可以做任何数量的事情来允许。

  • 将该属性设为公开,并告诉人们不要在子类中使用它。如果他们愿意,他们仍然可以。
  • 将属性设为 public 并将其标记为 @protected,以便让分析器告诉人们除了在子类中之外不要使用它。如果他们愿意,他们仍然可以。
  • 保持属性私有并提供一个单独的方法来访问它:
    mixin A {
      // This property is not accessible to any inheriting class.
      int _privateProperty = 2;
      static int getPrivateProperty(A a) => a._privateProperty;
      static void setPrivateProperty(A a, int value) {
        a._privateProperty = value; 
      }
    }
    
    如果他们真的想要,任何人仍然可以进入该物业,但他们需要知道 它来自A
相关问题