2012-02-26 61 views
5

我想打一個屬性,讓我來指定用於財產的一些方法,這樣的方法參考:如何使屬性參數

public class MyClass 
{ 
    [MyAttribute(Converter="ConverterMethod")] 
    public string Prop { get; set; } 

    public static string ConverterMethod(string src) 
    { 
     return src + " converted"; 
    } 
} 

什麼是「正確」的方式做到這一點?

這裏是我看到的方式:

  1. 製作字符串屬性和提取相應的方法與反思運行
  2. 期間
  3. Dictionary<string, Func<string, string>>與運行時對應的方法來填充它。然後使用屬性的字符串屬性作爲關鍵字提取方法。這種方法更耐重構,如果我重命名方法一切都會工作(字典鍵將保持不變)
  4. 使'IConverter'界面,並通過typeof(ConverterImpl)屬性。然後在運行時創建一個轉換器實例並使用其接口轉換值。這種方式似乎對我來說是最好的,但我從來沒有在屬性中使用Type屬性,甚至不知道它們是否序列化良好。

哪種方法最好?還有其他方法嗎?人們通常如何做這種事情?

回答

2

第一個選項非常正常,並且具有簡單性的優點。你說它對重構有點容易,但是......這很少是一個「真正的」問題。然而,另一種(第四種)方法是使用抽象方法創建屬性抽象,並使用屬性中的轉換代碼對其進行子類化 - 然後在運行時您可以獲取屬性(作爲基本屬性)並且只是調用虛擬方法,這種方法在MVC等事情中很常見。個人而言,我通常只使用第一個選項,以及單元測試的安全性(在重構等情況下)。