比方說,我有兩個基本的抽象類,具有完全不同的功能:筆記本電腦和智能手機。 (假設功能完全不同)。而在我目前的項目中,我已經有許多筆記本電腦和智能手機的實施,而且他們總是完全不同。多繼承和C#
但突然間,我收到一個要求添加一個pc-tablet實現的類,實際上它具有智能手機和筆記本電腦的功能。現在改變基礎類已經太晚了,實際上我非常肯定這款pc平板電腦只會出現一次。
問題是,我應該能夠在智能手機的conainer中容納我的pc-tablet,但它也應該是筆記本電腦,因爲繼承的功能(實際上除此之外,在項目pc-tablet的某些部分僅用於筆記本電腦,並不需要智能手機的功能,而且將PC平板電腦視爲該項目特定部分的智能手機也不好)。所以我有PcTabletAsLaptop:筆記本電腦類,這實際上是一臺筆記本電腦,而不是智能手機。
我的解決辦法是增加一個包裝:
class PcTablet : SmartPhone
{
private PcTabletAsLaptop _pcTablet;
// Here goes all the methods of PcTabletAsLaptop as proxies:
public void Call(int number)
{
_pcTablet.Call(number);
}
// .....
}
有200+的方法,我想從PcTabletAsLaptop自動生成它們。
該解決方案看起來相當複雜。我的問題是好的,或者有一些簡單的方法可以做到這一點?
你不能添加更多的基類「MobileDevice」,並讓它們都繼承它嗎? –
200多種方法?也許是時候考慮一些重新設計。 –
@DaveBish我不想改變原始層次,因爲該項目已經投入生產。實際上,這是客戶的要求(我們正在編寫框架,因此代碼設計也被視爲需求的一部分) – Archeg