7

たとえば、クラスに含まれるプロパティがあります

public class Greeter {
   private Hashtable _data;
   public string HelloPhrase { get; set; }

   public Greeter(data) {
      _data = data;
   }
}

私がやりたいのは、次のように、HelloPhraseプロパティに属性を追加することです。

[MyCustomAttribute("Hello_Phrase")]
public string SayHello { get; set; }

コンストラクター中に、MyCustomAttributeが定義されているClass(Greeter)のプロパティを反映し、プロパティのGet/Setメソッドを匿名メソッド/デリゲートに設定できるようにします。

  public Greeter(data) {
      _data = data;
      ConfigureProperties();
   }

クラスからPropertyInfoを取得することができましたが、これはGetSetMethod(http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.getsetmethod.aspx)と対応するGetGetMethodのみを公開します。

こことオンラインでいくつかの質問を読みましたが、ある種のアスペクトライブラリを使用しない答えを見つけることができません。

実行時にGet/Setメソッドを設定するためのプロバイダーポインターはありますか?理想的には

x =>_data[keyDefinedByAttribute]; 
4

1 に答える 1

4

あなたはこれを行うことはできません。プロパティゲッターとセッターの実装を動的に交換することはできません。あなたが得ることができる最も近いものは次のいずれかです:

  1. 動的プロキシ
  2. AOPライブラリ

動的プロキシはあなたに適しているかもしれませんし、そうでないかもしれませんが、IMO私は側面よりもそれを使用するソリューションを望んでいます。ただし、動的な動作はプロキシクラスで表示されます(インターフェイスのいずれか、または仮想プロパティを動的にサブクラス化してオーバーライドすることによって)。

しかし、いかなる状況でも、SetGetMethodまたはのようなものはありませんSetSetMethod

于 2011-07-26T19:58:43.470 に答える