web-dev-qa-db-ja.com

バッキングフィールドを必要とせずにC#のプロパティの取得/セットにコードを追加しますか?

バッキングフィールドを自動的に生成するプロパティを作成する方法を知っていますか?私が行く場合のように:

public String SomeProperty {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は本文を宣言する必要があるため、コンパイルエラーが発生することはわかっています。

調べてみたら何も見つかりませんでしたが、誰か知っているかチェックしてみようと思いました。

私が本当に求めているのは、プロパティが変更されたときにイベントをトリガーする方法ですが、余分なものをすべて追加する必要はありません。助言がありますか?

29
ashley

簡単な答えはノーです、あなたはそれを両方の方法で持つことはできません。から msdn

C#3.0以降では、プロパティアクセサーに追加のロジックが必要ない場合、自動実装されたプロパティにより、プロパティ宣言がより簡潔になります

19
Claies

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

これを実現できる製品 http://www.postsharp.net/ (プロパティ/メソッド呼び出しのインターセプト)があり、無料版があるようです。

0
Maximum Cookie