Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要C#中的多重继承功能。我做错了什么?_C#_Multiple Inheritance_Oop - Fatal编程技术网

需要C#中的多重继承功能。我做错了什么?

需要C#中的多重继承功能。我做错了什么?,c#,multiple-inheritance,oop,C#,Multiple Inheritance,Oop,俗话说,如果你需要多重继承,你的设计就失败了 我如何在不需要实现任何东西的情况下在C#中实现这一点 C#只允许单一继承,尽管您可以从任意多个接口继承 您可以只选择一个类进行继承,并创建rest接口,或者只创建所有接口 您还可以像这样链接您的继承: class UDPClient { } class LargeSimulator { } class RemoteLargeSimulatorClient : UDPClient, LargeSimulator { } 要以您想要的方式获得多重继

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

我如何在不需要实现任何东西的情况下在C#中实现这一点

C#只允许单一继承,尽管您可以从任意多个接口继承

您可以只选择一个类进行继承,并创建rest接口,或者只创建所有接口

您还可以像这样链接您的继承:

class UDPClient
{
}

class LargeSimulator
{
}

class RemoteLargeSimulatorClient : UDPClient, LargeSimulator
{
}

要以您想要的方式获得多重继承,您需要使您的UDPClient和LargeSimulator
接口
,而不是


类多重继承在C#

中是不可能的,您只能从C#中的单个基类继承。但是,您可以实现任意数量的接口。将这一事实与的出现结合起来,你就有了一个(令人讨厌的)解决办法。

简单的回答:在C#中不允许多重继承。了解接口:

答案稍微长一点:也许其他一些设计模式适合您,比如策略模式等。继承并不是实现代码重用的唯一方法

class UDPClient
{
}

class LargeSimulator : UDPClient
{
}

class RemoteLargeSimulatorClient : LargeSimulator
{
}

不幸的是,您将需要为成员编写包装器方法。C#中不存在多重继承。但是,您可以实现多个接口。

多重继承的一个可能替代方法是mixin。不幸的是,C#也没有这些,但解决办法是可能的。大多数依赖于扩展方法的使用(正如前面的回答者所建议的)。请参阅以下链接:


看起来您的设计已关闭。编辑:我希望实现继承而不是接口继承。。。是的,我知道接口。。我只是想知道c#是否只是一堆复制/粘贴。。。或者有没有办法重用来自一个源的代码?您确定RemoteLargeSimulatorClient是UDPClient吗?也许你应该改用合成。LargeSimulator有100000个事件和方法(来自外部库)。。。UDPClient具有低级网络功能。。我需要选择1并复制粘贴吗?看起来很不可思议。。对于一门真正的语言,不要用这个。您似乎不需要将两个对象合并为一个对象。加入这么大的组织似乎有点过分了。也许游戏中缺少了一些设计模式。@jaybny,如果你告诉我们更多你想做的事情,我们本可以更好地帮助你。听起来,实体和组合比接口、继承和抱怨C#只是“复制粘贴”更有好处
interface ILARGESimulator
{
}

interface IUDPClient
{
}

class UDPClient : IUDPClient
{
}

class LargeSimulator : ILARGESimulator
{
}

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

}