c 多重繼承

2021-06-16 16:50:03 字數 3741 閱讀 2855

其實想寫這篇文章,是因為突然在整理論壇上的帖子的時候,突然發現乙個人問我如何才能在c#中實現多重繼承,當時我答的很隱晦,因此這裡我想補充說明一下.

首先,我要說明一下,c#中是沒有類的多重繼承這個概念.要使用多重繼承必須要通過介面inte***ce來完成.可是大家都知道inte***ce實際上就是乙個虛函式列表指標.內部封裝的只有函式和屬性.而且介面(inte***ce)不能實力化只能通過派生(因為沒有建構函式)才可以使用.這一點和抽象類很類似,可是抽象類是個類,他有方法的實現.它所描述的物件是乙個無法在現實中具現的物件,但它本身是個類物件.而介面實際上是一種標準.說了這麼多,下面我來舉乙個例子如何在c#中實現多重繼承.

mybase.cs?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceintdv

}

}

myderive1.cs?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceintdv

publicvoidshowmyname()

publicvoidrename(stringn)

}

publicinte***ceimyderive1

}

myderive2.cs?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceintdv

publicvoidshowmyage()

publicvoidreage(inta)

}

publicinte***ceimyderive2

}

mymderive.cs?

usingsystem;

usingsystem.collections.generic;

usingsystem.linq;

usingsystem.text;

namespaceintdv

publicvoidshowmyname()

publicvoidrename(stringn)

publicvoidshowmyage()

publicvoidreage(inta)

}

}

事例分析,首先我上在一開始定義了乙個基類mybase,並派生出了兩個派生類分別為myderive1,myderive2

這兩個類分別定義了一組操作,myderive1中定義了操作showmyname 和 rename 並通過接imyderive1加以

描述. myderive2中定義了操作showmyage 和 reage 並通過介面imyderive2來描述,這樣我在多重繼承中

只用繼承介面也就是imyderive1和imyderive2就可以保證操作列表的繼承,操作的實現通過組合模型.在

介面方法中體現.這裡還是從**來說明,我的派生物件mymderive(m即多從繼承之意),雖然只繼承了介面,

可是在建構函式中,卻動態分配(new)了myderive1 和 myderive2 兩個物件.並在操作showmyname 等介面繼承來的操作中實際呼叫了myderive1 和 myderive2 的操作.由於myderive1 和 myderive2 是在

mymderive內定義的,所以客戶端**(也就是我的主函式)並不需要管理物件的分配和釋放(當然在clr託管

環境中物件的釋放一般也並非人為).

由以上例子,可以看出,實現藉口留出函式介面具體實現通過組合的方式來實現多重繼承中方法體的實現.這樣既保證了單一繼承父類的唯一性,又保證了多重繼承的優點.我個人認為是個很不錯的設計方法,並且在我的程式設計中很多地方都採用了該方法.那麼好了,就到這裡了.

多重繼承 C 中的多重繼承

多重繼承是c 的一項功能,其中乙個類可以從多個類繼承。繼承類的建構函式以它們繼承的相同順序被呼叫。例如,在以下程式中,在a的建構函式之前呼叫b的建構函式。include using namespace std class a class b class c public b,public a not...

C 多重繼承

c 中的多繼承可看做是單繼承的擴充套件,就是乙個派生類對應多個基類。以下是一段多重繼承的 class a class b class c public a,public b 以上的程式中,派生類c繼承了基類a b。派生類c中,公有繼承了a,所以c的共有成員中有a中的兩個共有成員函式,而私有繼承的b基...

C 多重繼承

1.1乙個派生類繼承多個基類稱為多重繼承。1.2宣告多重繼承的方法。如果宣告了類a,b,c,可以宣告多重派生類d。class d public a,private b,protected c 1.2多重繼承派生類的建構函式,如 派生類建構函式名 總參數列列 基類1建構函式 參數列列 基類2建構函式 ...