簡體   English   中英

如何在帶有私有變量的 dart 構造函數中使用它

[英]How to use this in a dart constructor with private variables

當我嘗試在 dart 中創建構造函數時,例如Student(this._name)它不適用於私有變量。

我已經嘗試過使用 setter,但它也不起作用。

    class Student{

    var _id;
    var _name;

    Student(this.id, this.name);

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;

    }

不支持此功能,因為 它會將私有實現暴露給外部。

\n

如果您要重命名 var _id; var _userId; 您將通過重命名私有字段來破壞使用您的類的代碼。
請改為在我的答案下方查看評論。

  class Student{

    var _id;
    var _name;

    Student({this._id, this._name}); // error

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;
  }

另類

  class Student{

    var _id;
    var _name;

    Student({int id, String name}) : _id = id, _name = name;

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;
  }

如果 class 是 inheritance,你們中的一些人可能會遇到困難,您只需要在初始化私有后添加逗號 (,)。

例子

class Animal {
  String _name;
  int _age;
}

class Dog extends Animal {
  String _race;
  Dog(String name, int age, {String? race}) : _race = race ?? "Wild", super(name, age);
}

希望這段代碼能幫到你。

你可以使用這個符號

class Student {
  String _id;
  String _name;

  Student({required String id, required String name})
      : _id = id,
        _name = name;
}

此表示法無效,因為該變量不是private並且其元素同樣可以再次訪問。

DartLang 說:避免在 getter 和 setter 中包裝字段只是為了“安全”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM