我們知道無法將父對象轉換爲其子類之一。c#繼承:將父對象轉換爲子對象
那麼什麼是解決以下問題的好方法: 假設我有一個父類「Person」和兩個子類:Customer和Employee。請注意Person類是而不是抽象(意思是它可以實例化)。 現在我得到了以下方法簽名:
public Person GetPersonById(long id)
這使得有可能要麼返回一個人,或者其子類中的一個。 如果我使用這種方法,我可以通過GetType()檢查它是否是一個孩子。但是,我無法輕鬆訪問特定於子類的字段/方法,因爲我不能僅僅投射它。 一種方法是爲每個將父類作爲參數的子類實現一個構造函數,並返回一個新的子類實例。這有缺點,我仍然會有很多重複的代碼(因爲我必須爲每個孩子分配每個父母字段)。
我能想到的另一種方法是將方法改成這樣:
public object GetPersonById(long id)
這樣的話,我可以返回的任何類。我只是檢查返回的類的類型,然後正確地轉換它。但不知何故,這種方法似乎很髒。
沒有任何人有更好的方式來做到這一點?
好吧,我知道爲什麼我來到了錯誤的假設,你不能施放父母的孩子的:我使用實體框架並創建代理類,我總是相匹配的代理類的類型,因此它永遠不會工作。 – Cleo 2013-04-11 14:52:01