には、どうするのがベストなアクセス特性から、同じクラス、accessorsます。[定休日]
-
21-08-2019 - |
質問
この機能はありませんも一貫したやつも何人います。
いまアクセスの内的性質(公開)?
例えば私はこの物件:
Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
同じクラス内の他の機能をいたしますのでご了承ください。るのか。
_Name = "Johnny"
または
Name = "Johnny"
無視することに使った名前の代わりにしてはならないものとします。の名前です。
解決
個人的に私は、可能な限りプロパティを使用することを好みます。これは、あなたはまだ検証を得ることを意味し、あなたは簡単にプロパティのアクセスにブレークポイントを置くことができます。それぞれが検証制約ようmin <= max
を持っ例えば、「最小値と最大値」のペア、 - これはのは、あなたがお互いに対して検証二つの特性に変更を加えるしようとしているの動作しません。常に。あなたは(C#)を持っているかもしれません。
public void SetMinMax(int min, int max)
{
if (max > min)
{
throw new ArgumentOutOfRangeException("max";
}
// We're okay now - no need to validate, so go straight to fields
this.min = min;
this.max = max;
}
将来のある時点で、私はC#、それはのちょうどのプロパティにプライベートだように、プロパティ内バッキングフィールドを宣言する能力を獲得してもらいたいです
public string Name
{
string name;
get { return name; }
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
name = value;
}
}
プロパティ以外では、あなたは、まったくname
でのみName
を取得することができません。我々はすでに自動的に実装プロパティのためにこれを持っているが、彼らは任意のロジックを含めることはできません。
他のヒント
私は言うでしょう。
Name = "Johnny"
その理由は、私はいくつかの検証持っている(またはトリガ、または遅延初期化を、または...)、以降の名前を割り当てるときに、いくつかの検証を挿入することを決定するかもしれないと私はそのコードをトリガすることを確認したいかもしれないということです。
私が好むます:
Name = "Johny"
私にとっては、その理由は何か悪いことが_Nameで発生した場合、あなたは常にゲッター/セッターでいくつかの出力を入れて、トラブルを引き起こしているかを調べることができ、非常に簡単です。
これは非常に興味深いですが、私は
人々のほとんどは、私が何をやって考えますMe.Name = "Johnny"
または
Name = "Johnny"
私が使用して見てきたプロジェクトのほとんどが
_Name = "Jonny"
スタイル。どちらでも、私は悪い考えだった、と回答のおかげで、あなたはそれを確認しました。でも、いくつかのツールによって自動コード生成されたコードのほとんどは、直接アクセスを使用します。
いずれかの特定のパフォーマンスヒットはありますか?それともそこセットで余分なコードがないか、または取得するときに、コンパイラはそれを最適化されます。
利用性(名)となります。と思う物は唯一の"所有者"の基本となるフィールド(_name).
優位性の封止フィールドの物件:
- 読みやすさ一地域のコードが_nameを変更し、又は処理前を返します。
- 簡単にセットの休憩ポイント、デバッグ等
- ドライ:バーコードの繰り返しなどの検証処理があります。
- 変化耐久力:変化の検証処理には影響しないコードを使用 物件です。