2011-09-16 49 views
0

我有一個庫(沒有源代碼),對於某個對象,我需要添加一些屬性。 什麼是一種方式來做到這一點?我知道我可以擴展課程併爲孩子添加屬性。我知道C#中還沒有擴展屬性。你會建議什麼?謝謝 !C中的OOP原則#

類的元數據可以是這樣的:

public class ResultClass 
{ 
    public IList<Item> Results { get; set; } 
    public int TotalResults { get; set; } 
} 

,我想添加一個:

String description; 

它。謝謝。

+0

太糟糕了,這沒有標記爲部分類。 – neontapir

回答

0

我認爲你正在使用擴展屬性混合擴展方法。 和C#中的最後一個do not exist。 所以你應該擴展類或創建一個繼承類。

+0

謝謝!我的意思是沒有擴展屬性。 – mishap

+0

當你說「擴展」時,你的意思是使用擴展方法嗎?我需要添加屬性。所以唯一的辦法是繼承? – mishap

2

有幾個策略你可以採取。繼承是最明顯的一個。你也可以考慮構圖。你可以給我們一些關於對象的更多細節,以及你需要添加什麼屬性,爲什麼?

看到擴大問題後:

以上(成分或繼承)概述無論是戰略可能會爲你工作。就我個人而言,我更喜歡構圖。我認爲它可以更好地隔離您可能會對第三方庫進行的更改。它還會迫使你通過圖書館類的公共接口來工作,當你沒有對類的內部知識或控制時,這是更可取的。

這裏是構圖的最基本的例子。

public CompositeClass 
{ 
    private ResultClass _resultClass = new ResultClass(); 

    public IList<Item> Results 
    { 
     get { return _resultClass.Results; } 
     set { _resultClass.Results = value; } 
    } 

    public int TotalResults 
    { 
     get { return _resultClass.TotalResults; } 
     set { _resultClass.TotalResults = value; } 
    } 

    // 
    // New Property 
    // 
    public string Description { get; set; } 
} 
+0

我修改了這個問題。謝謝! – mishap

+0

+1我同意:可以創建一個複合類或從中繼承並添加您的功能。 @Chuchelo:這就是爲了擴展一個已經存在的類而繼承的關鍵。 – NotMe

+0

@ChrisLively:我已經有了擴展的方法,但是你是什麼意思的複合類?謝謝 ! – mishap

1

爲什麼需要添加屬性?如果這是出於綁定目的,那麼我會建議創建一個包裝類或創建自己的繼承類型,以響應第三方類型中的各種狀態更改而引發PropertyChanged事件。不要告訴我們你提出的解決方案,你應該告訴我們你正試圖解決的實際問題。另外(因爲我不能投票結束/遷移),這不是一個真正有效的討論這個網站。

+0

雖然這是一個合理的問題。遷移到stackoverflow會比關閉它更好。 – Nathanael

+0

@Nathaneal:對,我想我應該指定。如果我在這裏擁有密切的權威,我會選擇遷移。 –