質問

可能な複製:
パブリックデータメンバー対ゲッター、セッター
クラスのプライベートメンバーの目的

変数を公開し、そのような行の手間を避けることができる場合、ゲッターとセッターの使用とは何ですか A.setVariableX(A.getVariableY())?

役に立ちましたか?

解決

実装の詳細を非表示にします。代わりにプロパティを公開することを選択した場合、後でそれらの作業方法を変更することにした場合、関連するすべてのコードを変更する必要があります。

ゲッターとセッターを使用すると、目に見えるAPIを変更せずに内部実装の詳細を変更することができます(したがって、問題のクラスのAPIを使用するコードを変更する必要はありません)。

他のヒント

ゲッターとセッターは検証を行うことができ、怠zyなインスタンス化を行うことができますが、パブリックメンバーはできません。

余談ですが、これは言語不可知論者ではありません。プロパティを実装するほとんどの言語は、コード内のパブリックメンバーのように見えるように実装を抽象化するためです。

なぜなら、あなたの変数が何であるかについていくつかの制約があり、あなたがそれを設定したときにそれをチェックしなければならないことについていくつかの制約があるからです。

たとえば、年齢が-1になることを許可されていない場合、セッターでそれを確認します。

if(value >= 0)
{
   _age = value;
}
else
{
  throw new InvalidAgeException("Age may not be less than 0");
}

セッターとゲッターは、コードに「プロパティ」が何であれ、プロパティに適用されます。

たとえば、次のことをすることができます angle ラジアンで表される角度値を保存する変数。その後、この変数のセッターとゲッターを定義し、関連性があると思われる任意の角度ユニットを使用できます。

カプセル化の原則の一部です。セッターとゲッターをインターフェイスとして使用してオブジェクトと対話するため、たとえば、クラスを使用するコードに触れずに機能性(入力データの検証など)を追加できるようにします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top