簡體   English   中英

需要C#中的多重繼承功能。 我究竟做錯了什么?

[英]Need multiple inheritance functionality in C#. What am I doing wrong?

class UDPClient
{
}

class LargeSimulator
{
}

class RemoteLargeSimulatorClient : UDPClient, LargeSimulator
{
}

俗話說,如果你需要多重繼承,那么你的設計是不對的。

如何在C#中完成此操作而無需實現任何內容?

您只能從C#中的單個基類固有。 但是,您可以根據需要實現任意數量的接口。 將此事實與擴展方法的出現相結合,您就可以進行(hacky)解決方案。

C#只允許單繼承,但您可以從任意數量的接口繼承。

您可以只選擇一個要繼承的類,然后創建其余的接口,或者只創建所有接口。

你也可以像這樣鏈接你的繼承:

class UDPClient
{
}

class LargeSimulator : UDPClient
{
}

class RemoteLargeSimulatorClient : LargeSimulator
{
}

要以您希望的方式獲得多重繼承,您需要創建UDPClient和LargeSimulator interface而不是class

C#中不可能進行類多重繼承

mixin的一種可能替代是多重繼承。 不幸的是,C#也沒有這些,但可以使用變通方法。 大多數人依賴於擴展方法的使用(如之前的回答者所建議)。 請參閱以下鏈接:

http://mortslikeus.blogspot.com/2008/01/emulating-mixins-with-c.html http://www.zorched.net/2008/01/03/implementing-mixins-with-c-extension-methods / http://colinmackay.co.uk/blog/2008/02/24/mixins-in-c-30/

簡短的回答:C#中不允許多重繼承。 閱讀接口: http//msdn.microsoft.com/en-us/library/ms173156.aspx

稍微長一點的回答:也許其他一些設計模式適合你,比如策略模式等。繼承不是實現代碼重用的唯一方法。

interface ILARGESimulator
{
}

interface IUDPClient
{
}

class UDPClient : IUDPClient
{
}

class LargeSimulator : ILARGESimulator
{
}

class RemoteLargeSimulatorClient : IUDPClient, ILargeSimulator
{
    private IUDPClient client = new UDPClient();
    private ILARGESimulator simulator = new LARGESimulator();

}

不幸的是,您需要為成員編寫包裝器方法。 C#中的多重繼承不存在。 但是,您可以實現多個接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM