2013-07-24 3 views
18

バッキングフィールドを自動的に生成するプロパティを持つ方法を知っていますか?私が行く場合と同様:バッキングフィールドを必要とせずにC#のget/setプロパティにコードを追加しますか?

は、私がそのプロパティにコードを追加したい場合は、私がようにバッキングフィールドを作成する必要があることを知っている:

public string someProperty = string.Empty; 
public string SomeProperty 
{ 
    get { return someProperty; } 
    set 
    { 
     someProperty = value; 
     DoSomething(); 
    } 
} 

基本的に、私が知りたいことはあります。 ..これを行う方法はありますか?バッキングフィールドを作成する必要はありませんか?たとえば、プロパティを設定したときに発生する何らかのイベントをトリガするために使用できます。私はこのような何かを探しています:

public string SomeProperty 
{ 
    get; 
    set { this.OnSomeEvent; } 
} 

しかし、私はgetニーズがsetがない場合は、本体を宣言したので、それはコンパイルエラーを引き起こすでしょうね。

私は調査して何も見つけられませんでしたが、誰かが知っているかどうかを確認すると思いました。

私が実際に何をしているかは、プロパティが変更されたときにイベントをトリガする方法ですが、余分なクラッタを追加する必要はありません。助言がありますか?

+7

'propfull'の後にタブタブをタイプすると、インスタンスフィールドでプロパティを簡単に作成できます。 – andrewb

+0

良い質問です。もしそれがjavascriptのようなものだったならば、 "this"はプロパティそのものを参照することができ、したがってバッキングフィールドを参照することができます。 – toddmo

答えて

16

簡単な答えはいいえ、両方の方法で使うことはできません。 C#3.0以降で

追加のロジックは、プロパティアクセサに必要とされない場合、自動実装プロパティは性宣言は、より簡潔に:msdnから。

+0

それは私が思ったものですが、私はそのオンラインの言及を見つけることができませんでした。お返事をありがとうございます。 – ashley

0

フレームワークに組み込まれているソリューションはありません。また、リフレクションによって既存のタイプを変更することはできません(実行時にロジックを追加するため)。これを達成する唯一の方法は、コンパイル時にあるようです。

この(傍受プロパティ/メソッド呼び出し)を実行できる製品http://www.postsharp.net/があり、無料版があるようです。

+0

postsharpは優れた選択肢で、アスペクト指向プログラミング(AOP)を行うことができます。 Cross Cutting Concerns(多数のビジネス要件に使用され、容易に分離できない動作)を管理することに関しては、AOPはあまり効果がありません。 – Claies

+0

興味深いことに、今までこの製品について聞いたことはありませんでした。 – ashley

関連する問題