我正在尝试将两个不同基类的功能组合到一个新类中,但无济于事。假设我有A类和B类,而B是具有不同功能的A的后代(即在运行时不能用作A的替代)并且需要一个C类,它结合了A和B,使用它们并提供了C用户的独特界面我怎样才能做到这一点? C#无法实现多重继承,接口似乎不适合。那我该怎么办?
答案 0 :(得分:14)
您的设计已被破坏。
B是具有不同功能的A的后代(即在运行时不能用作A的替代)
这种情况是对继承的误用。如果你想这样做,你应该使用A和A的组合或通用接口。 B而是单独实施。
答案 1 :(得分:1)
考虑显式接口实现:
http://msdn.microsoft.com/en-us/library/ms173157.aspx
public interface IFriendly
{
void Greet();
}
public interface IEnemy
{
void Greet();
}
public class SomeGuy : IFriendly, IEnemy
{
//default Greeting
public void Greet()
{
//...
}
//greeting when using an IFriendly reference
void IFriendly.Greet()
{
//,,
}
//greeting when using an IEnemy reference
void IEnemy.Greet()
{
//,,
}
}
答案 2 :(得分:0)
您说B
来自A
,但不同,不能用作A
;这完全违背了继承的目的。你想要实现什么目标?无论如何,听起来好像你应该使用合成而不是继承。如果C
未公开由A
或B
定义的界面,则它不应继承任何一个界面。
答案 3 :(得分:0)
您需要考虑这样的行为这一事实让我认为您可能需要考虑重构您的类结构。
但是,要解决您的直接问题,为什么不实例化这两个类(忽略它们处于继承关系中的事实)并按照您需要的顺序调用方法?将C视为A和B的外观模式。
答案 4 :(得分:0)
问题解决了。现在使用System.Reflection。