替換

2011-07-26 116 views
5

我有包含在一個類實例的屬性在C#反射或類似的(沒有第三方庫)屬性的getter/setter替換

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已經定義的類(招待員)和屬性的Get/Set方法設置爲匿名方法/代表。

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

我設法從班上的PropertyInfo的,但這僅公開GetSetMethod(http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.getsetmethod.aspx)和相應的GetGetMethod。

我已閱讀了一些在這裏和在線的問題,但無法找到不使用某種Aspects庫的答案。

任何人都可以提供指針來設置在運行時獲取/設置方法?理想的代表像

x =>_data[keyDefinedByAttribute]; 

回答

4

你不能這樣做。您不能動態替換屬性獲取器和設置器的實現。你可以得到的最接近的或者是:

  1. Dynamic proxies
  2. AOP庫

動態代理可能會或可能不適合你,但海事組織我更喜歡使用,超過方面的解決方案。但是,動態行爲將在代理類浮出水面(一個接口或者通過動態地繼承並重寫你的虛擬財產。)

但在任何情況下,有什麼樣SetGetMethodSetSetMethod

+0

謝謝我開始認爲這種情況對我來說不是一個大問題。我可能會嘗試與統一攔截,因爲我知道,然後環顧輕量級圖書館。 –