2

我试图将两个不同基类的功能组合成一个新类,但无济于事。假设我有 A 类和 B 类,而 B 是具有不同功能的 A 的后代(即在运行时不能用作 A 的替代品)并且需要一个结合了 A 和 B 的类 C,同时使用两者并提供C 用户的独特界面。我怎样才能实现这一点?C# 无法实现多重继承,接口似乎不适合。那么我能做什么呢?

4

5 回答 5

14

你的设计坏了。

B 是具有不同功能的 A 的后代(即在运行时不能用作 A 的替代品)

这种情况是对继承的滥用。如果你想这样做,你应该使用组合或 A 和 B 分别实现的通用接口。

于 2010-02-14T14:22:15.463 回答
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()
  {
    //,,
  }
}
于 2010-02-14T14:25:24.767 回答
0

问题解决了。现在使用 System.Reflection。

于 2010-02-16T12:54:15.580 回答
0

你说那是BA但是是不同的,不能用作A; 这完全违背了继承的目的。你想达到什么目的?无论如何,听起来您应该使用组合,而不是继承。如果C不公开由Aor定义的接口B,那么它不应该从其中任何一个继承。

于 2010-02-14T14:22:46.487 回答
0

您需要考虑这样的操作这一事实使我认为您可能需要考虑重构您的类结构。

但是,为了解决您的直接问题,为什么不实例化两个类(忽略它们处于继承关系的事实)并按您需要的顺序调用方法?将 C 视为 A 和 B 的外观模式。

于 2010-02-14T14:26:21.377 回答