2010-06-09 99 views
3

我有一個使用C#編寫的.net網站,它將提供其他開發人員可以使用的功能。 所以我會做一些默認的實現和開發人員可以重寫一些方法擴展類和覆蓋方法的問題

例: 我有一個類ShoppingCart和類Product類產品富人的方法getProductPrice 的購物車會調用該方法getProductPrice總計算的車

ShoppingCartProduct價格都在同一個項目,我會給開發商.dll文件,使他們無法改變的源代碼,這樣我們就可以更新組件後

因此,他們需要做出其他項目和擴大產品類別,並覆蓋方法getProductPrice,使他們能夠實現有自己的邏輯 的問題是,購物車會不會調用擴展方法,但原來

如果我們已經對於開發者和購物車的擴展項目將稱爲擴展方法,那麼我們有一個循環參考 ,因爲擴展產品需要參考產品和擴展產品的購物車

部分類也不工作,因爲我們只能在同一個程序集內使用部分

有沒有人有建議?

在此先感謝。

+0

術語是「覆蓋」,而不是「覆蓋」 – dthorpe 2010-06-09 16:36:18

+0

做任何答案都有幫助嗎?你需要進一步的幫助嗎? – GenericTypeTea 2010-06-11 09:43:57

回答

2

您應該將所有Product方法爲virtual標記:

public virtual decimal GetProductPrice() { }; 

那麼誰以後會接管開發人員可以從產品繼承和覆蓋的方法:

public class OverriddenProduct : Product 
{ 
    public override decimal GetProductPrice() { } 
} 

因爲OverridenProduct(以我的例子)繼承自Product,它仍然可以添加到ShoppingCart類中的Product集合中。

Just symantics我猜,但ShoppingCart類的方法應該可能是GetTotalPrice()而不是GetProductPrice(),因爲我假設您獲得購物車中產品的總成本。

+0

試圖實現它,改變一些邏輯和類,但我認爲這是一個解決方案 – Marco 2010-06-11 10:20:13

0

將您的方法聲明爲虛方法。這允許您在繼承類中覆蓋它,以便對它的任何調用將始終路由到重寫實現。 More about virtual methods

此外,GetProductPrice聽起來像是可能更好地實現作爲屬性而不是方法的東西。