How to emulate multiple inheritance in C#?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Multiple Inheritance in C#
号
我知道C不支持类中的多重继承。
但是,我需要在myclass中添加classa和classb的特性:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class ClassA { /* Third party class*/ } public class ClassB { /* Third party class*/ } public class MyClass : ClassA, ClassB { /*Compilation error*/ } |
我有什么办法可以做到吗?
在C中只能有多个接口继承。使用这些第三方类所能做的最好的事情是将每个类的一个实例封装到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
号
如果您需要在需要
显然,如果
但是,到最后,C没有多个实现继承。如果你需要这样的语言(这是一种罕见的语言),那么C语言就不是一种合适的语言。也没有其他的clr语言,因为这是一个clr限制,而不是一个c语言。
如果不能更改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | //third party class ClassA { void X(); } class ClassB { void Y(); } //your code interface IClassA { void X(); } interface IClassB { void Y(); } class MyClassA : ClassA, IClassA { } class MyClassB : ClassB, IClassB { } class MyClass : IClassA, IClassB { IClassA a = new MyClassA(); IClassB b = new MyClassB(); public void X() { a.X(); } public void Y() { b.Y(); } } |
。
为ClassA和ClassB(分别称为IClassA和IClassB)创建一个包含您希望访问的所有方法的接口。
然后在ClassA和ClassB中实现该接口。
最后,让MyClass实现IClassA和IClassB:
1 2 3 | public class MyClass : IClassA, IClassB { } |
不,不能从多个类继承。只允许多个接口继承。考虑改用合成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class MyClass : ClassA, IClassB { private IClassB _classB; // delegate IClassB implementation to it public MyClass(IClassB classB) { _classB = classB; } public void BMethod() { _classB.BMethod(); } } |
您可以为