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

4
class UDPClient
{
}

class LargeSimulator
{
}

class RemoteLargeSimulatorClient : UDPClient, LargeSimulator
{
}

这句话的意思是,如果你需要多重继承,那么你的设计可能存在问题。
在C#中,如何实现多重继承而不需要自己编写代码呢?

看起来你的设计有些问题。 - bzlm
编辑:我想要实现继承而不是接口继承... 是的,我知道接口... 我只是想知道C#是否只是一堆复制/粘贴... 还是有一种方法可以从一个源重用代码? - jaybny
你确定 RemoteLargeSimulatorClient UDPClient 吗?也许你应该使用组合。 - empi
6个回答

5

C#只允许单一继承,但您可以从尽可能多的接口中继承。

您可以选择仅从一个类继承,并使其余界面,或者仅仅将它们全部作为接口。

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

class UDPClient
{
}

class LargeSimulator : UDPClient
{
}

class RemoteLargeSimulatorClient : LargeSimulator
{
}

5
在C#中,你只能从一个基类继承。但是,你可以实现任意多个接口。结合扩展方法的出现,你可以使用一种(有点hacky的)解决方法。

1

要按照您的想法实现多重继承,您需要将您的UDPClient和LargeSimulator设计为“接口”而不是“类”。

C#不支持类的多重继承。


1

0
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#中不存在多重继承,但可以实现多个接口。


1
LargeSimulator有100,000个事件和方法(来自外部库)... UDPClient具有低级网络功能.. 我需要选择一个并复制粘贴吗?这似乎很荒谬.. 对于一种真正的语言来说。 - jaybny
他们只是不使用这个。你似乎不需要一个将两者合并成一个的对象。将如此庞大的东西合并起来似乎有些过度。也许游戏中缺少一些设计模式。 - Marino Šimić
@jaybny,如果你告诉我们更多关于你想做什么的信息,我们可以更好地帮助你。听起来SOLID和组合比接口、继承以及抱怨C#只是“复制粘贴”更适合你。 :) - bzlm

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接