C#中需要多个继承功能.我做错了什么

本文关键字:功能 错了 什么 继承 | 更新日期: 2023-09-27 18:00:00

class UDPClient
{
}
class LargeSimulator
{
}
class RemoteLargeSimulatorClient : UDPClient, LargeSimulator
{
}

俗话说,如果你需要多重继承,你的设计就失效了

我如何在C#中完成这项工作而不需要实现任何东西?

C#中需要多个继承功能.我做错了什么

您只能从C#中的单个基类中固有。但是,您可以实现任意数量的接口。将这一事实与扩展方法的出现结合起来,你就有了一个(棘手的(解决方案。

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.htmlhttp://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#中不存在多重继承。但是,您可以实现多个接口。