2013-02-06 72 views
3

我在一個應用程序中的類 - 我不能改變(傳統) - 這是一個組件(DLL文件)的內部:從一個類繼承和添加附加屬性

public class ShippingMethod 
{ 
    public string ShipMethodCode { get; set; } 
    public string ShipMethodName { get; set; } 
    public decimal ShippingCost { get; set; } 

    public List<ShippingMethod> GetAllShippingMethods() 
    { 
    ...... 
    } 
} 

我有第二個應用程序引用該程序集(DLL文件)並需要使用所有運輸方法填充下拉列表。例如:「UPS - $ 3.25」

問題是,它需要使用正確的格式來支付不同的貨幣。例如:$ 3.25或3.25€,具體取決於名爲CountryID的參數。

我寫了一個函數String DisplayMoney(Decimal Amount, Integer CountryID),它將返回正確的金額格式。

現在我需要將此功能應用於每種運輸方式並將其保存到新列表中。 這樣做的最好方法是什麼?

我可以創建另一個類稱爲LocalizedShippingMethods如下:

public class LocalizedShippingMethod 
{ 
    public ShippingMethod ShipMethod { get; set; } 
    public string LocalizedShippingCost { get; set; } 
} 

這是實現這一目標的最佳方式是什麼?有沒有更好的方式來使用繼承來做到這一點?如果我使用繼承,我如何從第一個LIST獲取值到新列表中?

+0

將LocalizedShippingCost重命名爲LocalShippingCurrency? –

回答

2

這確實是一個很好的方法。您可以使用一個相當快的LINQ查詢到老List拉進新:

List<LocalizedShippingMethod> Translate(List<ShippingMethod> oldList) 
{ 
    return oldList.Select(a => new LocalizedShippingMethod 
    { 
     // Initialize properties according to however you translate them 
    }).ToList(); 
} 

此外,爲了使這個更精簡,更明顯,你可以做以下任何在翻譯幫助:

  • 創建LocalizedShippingMethod這需要在ShippingMethod和正確構造函數設置屬性
  • LocalizedShippingMethod這需要在ShippingMethod並返回一個初始化LocalizedShippingMethod創建靜態方法
  • LocalizedShippingMethod,從一個ShippingMethod
  • 轉換上ShippingMethod創建一個擴展方法創建一個操作,稱之爲ToLocalized()一個返回LocalizedShippingMethod
+0

這會複製列表屬性的屬性的數據? –

+1

它將按對象複製'List'對象的內容;您必須初始化LocalizedShippingMethod初始化塊中的屬性才能正確創建該對象。 – eouw0o83hf

+1

謝謝。這是這樣,我做到了。 'LocalizedShippingMethodList =(來自S對在OriginalShippingMethods''選擇新LocalizedShippingMethod {'' = ShippingMethod S,'' = LocalizedShippingCost DisplayMoney(S.ShippingCost,CountryID)'' })ToList( );' 這樣,每個對象不會被複制,而是被另一個變量引用。 ('ShippingMethod = S,') –

0

如果您爲ShippingMethod類創建擴展方法,該怎麼辦?

0

最好的方式做到這一點是任何方式效果最好適合你。如果你是需要維護這些代碼的人,那麼什麼會讓你的生活變得最簡單?

一旦你回答了這個問題,是最好的解決方案。