ゲッターとセッターはメソッドと同じような形で、戻り値の方の後にgetあるいはsetを付けます。 ゲッターは仮引数を持たず、適切な値を返します。セッターは適切な仮引数を1つ持ち、値は返しません。 アクセスするときには、メンバー変数へアクセスするときと同じ方法で参照できます。
class Line { Line(this.start, this.end); int start, end; int get length() => end - start; void set length(int len) { end = start + len; } } main() { Line line = new Line(1, 3); // ほかのメンバー変数(line.startなど)と同じ方法で参照できる。 // 出力: (1, 3) : length=2 print('(${line.start}, ${line.end}) : length=${line.length}'); // メンバー変数と同じ方法で代入もできる。 line.length = 5; // 出力: (1, 6) : length=5 print('(${line.start}, ${line.end}) : length=${line.length}'); }この例のように同じ名前のゲッターとセッターを1つのクラス内で定義することができます。しかし同じ名前のメンバー変数やメソッドを持つことはできません。
class Line1 { int length; int get length() => /* ... */; // エラー! } class Line2 { int length() { /* ... */ } int get length() => /* ... */ ; // エラー! }このような場合には、メンバー変数をプライベートにする(_lengthにする)と良いでしょう。
また、ゲッターとセッターはオーバーライドすることができません。
class Line { int get length() => /* ... */; String get length() => /* ... */; // エラー! }ゲッターとセッターの定義の前にstaticを付けると、静的なゲッターとセッターを定義することもできます。
こちらもどうぞ
0 件のコメント:
コメントを投稿