両方を行うことはできません。自動実装されたプロパティを使用し、その値を確認してください。ゲッターまたはセッターのいずれかにロジックを導入するとすぐに、それは自動的に実装されたプロパティではなくなります。
auti-実装する宿泊施設には、プライベートバッキングフィールドにアクセスするゲッター/セッターのためだけ糖衣構文がyou'dされているかのように書き込み、この:あなたがもし新しい価値さえを確認したい
public int MyInt
{
get { return _myInt; }
set { _myInt = value; }
}
あなたがいくつかのロジックを持つセッターを使用することが有効です。たとえば、アプリケーションが負の値を処理できないため、整数が正であるかどうかを確認することができます。だからあなたは単にセッターでその小切手を紹介します。
set
{
if (value >= 0)
_myInt = value;
}
さておき、あなたが(それはゲッターまたはセッターのいずれかである)一つだけの部分を定義can'tとして、あなたは括弧の両方を定義する必要があります。反対側では、もちろん、それらのうちの1つを完全に省略して、プロパティを読み取り専用または書き込み専用にすることができます(後者の使用についてはほとんど考えられませんが)。実際にはプロパティもgetメソッドとsetメソッドの構文的砂糖です。だからあなたはそれらをいつもの方法と考えることができます。なぜそこに論理を導入してはいけないのですか?もちろん、プロパティは、セッターやゲッタ内で何も特別なことが起こっていないと思うようになりがちですが、これはまた、慣習が示唆しているものです。しかし実際には何も特別なことはありませんが、プロパティの自動実装では、IDEには知られていないので、あなたのコードでアクセスできないバッキングフィールドにアクセスするだけですが、存在しますIL as shown here内にあります。
編集:あなたの質問に戻ってください。
int newValue = -1;
if(newValue >= 0)
myInstance.MyInt = newValue;
しかし、これは非常に厄介とで次のようになります。それはyou'dセッター内またはその前に、新しい価値を検証するためのロジックを導入した場合、このようにあなたもこれを書くことができます実質的な違いを作るwon't具体的には、あなたのコードのどこか他の場所にプロパティを設定してもう一度チェックする必要があるとすぐに、手元にあるDRYを破棄します。だから、それを行う方が良いです(セッター内で)once, and only once。
を実装するときには、簡単な検証を行うことができ、チェックを使用します。 – NtFreX
私の意見では、プロパティのセッターメソッドやゲッターメソッドにはロジックがあってはいけません。また、自動プロパティを使用することを提案します。 – Praveen
ちょっとしたことですが、プライベートプロパティではなく、プライベートフィールドと呼ばれています。パブリックプロパティはプライベートフィールドを使用します。 –