4

使用するメリットはありますか?

private var _someProp:String;

public function set someProp(value:String):void
{
    _someProp = value;
}
public function get someProp():String
{
    return _someProp;
}

単に使用するのとは対照的に:

public var someProp:String;

getter / setterを使用すると、さらに処理する必要がある場合や、プロパティが次のように変更されたときに通知を受ける必要がある場合に便利です。

public function set someProp(value:String):void
{
    _someProp = value;
    _somePropChanged = true;
    doSomethingElse();
}

しかし、これが必要ない場合は、パブリック変数を使用するだけでなく、getter / setterを使用する理由はありますか?

ありがとう!!

4

6 に答える 6

4

言語によっては、ゲッター/セッターを前もって紹介することをお勧めします。必要なことが判明した場合は、後で紹介することはできません(私はあなたを見ています、Java)。

于 2009-12-22T21:38:30.350 に答える
1

これは実際に使用している言語/フレームワーク/ツールキットに少し依存します-

ただし、バージョン管理とAPIの互換性に関連するゲッターとセッターを使用すると、多くの場合、メリットがあります。これは、それらをすべて単独で使用する非常に便利な理由になります。

于 2009-12-22T21:38:58.173 に答える
1

これは本当に言葉がわからないと答えられません。Getter と Setter はほとんどの言語でコストがかかりますが、将来的には柔軟性が得られます。一部の言語では、use 構文が変更されるため、呼び出し元のコードを変更せずに public を Getter/Setter に変更することはできません。しかし、これは私が主に書いている C# の問題ではありません。

Getter と Setter を使用すると、パラメーターの検証を行うことができます。最初の参照までオブジェクトの作成を遅らせることができます。それらには多くの利点があり、最初からそれらの利点のいずれかが必要な場合はいつでも使用します.

しかし、ゲッターとセッターは、すぐに必要な場合、または柔軟性が必要になると確信している場合にのみ使用します。そうでなければ、私はそれらを肥大化と見なします。

于 2009-12-22T21:54:46.490 に答える
0

ちなみに、public varから始めて、必要に応じて、使用している言語に応じて、コードの後半でgetter/setterに変換できます。

于 2009-12-22T21:40:23.693 に答える
0

あなたのプロパティが完全に愚かで、クラスの残りの部分に副作用がない場合は、必ずそれを public フィールドとして公開してください。

多くの場合、プロパティは副作用があるため、プロパティの設定方法とアクセス方法を制御する必要があります。

些細な例として、パブリック変数がコンストラクターで何かに設定されていない場合はどうなるでしょうか? これがnullとして返されても大丈夫ですか?または、null を返すのではなく、この変数を何かに設定しますか? これは、カスタム ゲッターが価値がある単純な例です。

于 2009-12-22T21:49:43.957 に答える
0

Getter と Setter を使用すると、変数に設定できる値をより詳細に制御できます。

bool setAge(int age){
   bol retVal = true;

   if(age <= 0)
       retVal = false;

   return retVal;
}

セッターがないと、値がゼロに設定され、悪いことが起こる可能性があります。

于 2009-12-22T21:50:53.907 に答える