私は XNA のチュートリアルを進めており、次のコードを使用しています。
private int score = 0;
public int Score
{
get { return score; }
set { score = value; }
}
プロパティを使用するポイントは何ですか?なぜ使用しないのpublic int Score = 0;
ですか?
私は XNA のチュートリアルを進めており、次のコードを使用しています。
private int score = 0;
public int Score
{
get { return score; }
set { score = value; }
}
プロパティを使用するポイントは何ですか?なぜ使用しないのpublic int Score = 0;
ですか?
ここでは自動プロパティを使用します。
public int Score { get; protected set; }
それは「タイピングが少ない同じこと」だからです(しかし、スコアを設定できる人が制限されるため、実際にはおそらくより良いでしょう;-)
プロパティのいくつかの理由 (パブリックメンバー変数より):
上記のように、プロパティを使用すると、ゲッターとセッターの可視性を個別に設定できます。
プロパティは Interfaces で指定できます。(あなたはインターフェイスに対してプログラミングしています...そうですか? ;-)
プロパティとメンバー変数を切り替えると、ABI が壊れます (アプリケーション バイナリ インターフェイス: たとえば、再コンパイルが必要です)。ただし、既存のプロパティの実装は、ABI を壊さずに再定義できます。
ブレークポイントはプロパティで設定できます。たまにとても便利。
「カプセル化」
フィールドを public にすることで、実装の詳細を公開します。将来、「スコアリング」は返される単純な値ではなく、計算の結果になる可能性があるため、抽象的な「GetScore」プロパティ関数の背後に隠すことで、実装の詳細を自由に変更できます。破壊的な消費者。
C# 3.0 では、自動生成されたフィールドをプロパティで使用できることに注意してください。
public int Score { get; set; } // this will create a hidden field, however all access (even from within the class) must be done by the accessor and mutator methods.
最大の理由は、ロジックを含めるためのリファクタリングの容易さです。( get および set アクセサーは実際にはメソッドであるため、フィールドからプロパティに変更するには、アセンブリを参照するアセンブリで再コンパイルする必要があります。) pst のコメントが示したように、 get および set に異なるアクセス修飾子を割り当てることもできます (例protected set
)。自動プロパティでは、通常、プロパティの代わりにフィールドを使用する理由は (読みやすさやその他の点で) ほとんどまたはまったくありません。