106

プライベート変数を作成したいのですができません。

これが私のコードです:

void main() {
  var b = new B();
  b.testB();    
}

class A {
  int _private = 0;

  testA() {
    print('int value: $_private');
    _private = 5;
  }
}

class B extends A {
  String _private;

  testB() {
    _private = 'Hello';
    print('String value: $_private');
    testA();
    print('String value: $_private');
  }
}

このコードを実行すると、次の結果が得られます。

String value: Hello
int value: Hello
Breaking on exception: type 'int' is not a subtype of type 'String' of 'value'.

また、このソース コードを編集してもエラーや警告は表示されません。

Dartでプライベート変数を作成するにはどうすればよいですか?

4

4 に答える 4

182

Dartのドキュメントから:

Java とは異なり、Dart にはキーワード public、protected、および private がありません。識別子がアンダースコアで始まる場合_、それはそのライブラリに対してプライベートです。

ライブラリは API を提供するだけでなく、プライバシーの単位でもあります。アンダースコアで始まる識別子は_、ライブラリ内でのみ表示されます。

ライブラリについて一言:

ライブラリ ディレクティブを使用しない場合でも、すべての Dart アプリはライブラリです。import および library ディレクティブは、モジュラーで共有可能なコード ベースを作成するのに役立ちます。

partライブラリを複数の Dart ファイルに分割できるディレクティブについて聞いたことがあるかもしれません。

于 2013-07-05T12:23:16.250 に答える
77

Dart のプライバシーは、クラス レベルではなくライブラリに存在します。

other.dartクラス A を別のライブラリ ファイル (例: )に入れるとしたら、次のようになります。

library other;

class A {
  int _private = 0;

  testA() {
    print('int value: $_private');  // 0
    _private = 5;
    print('int value: $_private'); // 5
  }
}

次に、次のようなメイン アプリにインポートします。

import 'other.dart';

void main() {
  var b = new B();
  b.testB();    
}


class B extends A {
  String _private;

  testB() {
    _private = 'Hello';
    print('String value: $_private'); // Hello
    testA();
    print('String value: $_private'); // Hello
  }
}

期待される出力が得られます。

String value: Hello
int value: 0
int value: 5
String value: Hello
于 2013-07-05T12:22:36.043 に答える