【发布时间】:2014-02-04 09:53:49
【问题描述】:
考虑 C# 中的以下结构:
interface I1
interface I2
abstract class A
- class A1 : A
- class A11 : A1, I1
- class A12 : A1, I2
- class A2 : A
- class A21 : A2, I1
- class A22 : A2, I2
现在我有一个 B 类,它在构造函数中接受一个参数。该参数必须是从 A 派生并实现接口 I2 的类,即它可以是 A12 或 A22 类型的类,但不能是 A11 或 A21。如何定义该参数?此外,我想稍后将参数作为属性存储在 B 中(供以后使用)。
我无法将 A 重新定义为接口,因为它提供了很多虚拟方法。我也不能跳过树状继承方案,因为 A1 和 A2 提供了许多在其他地方(不在 B 中)使用的特定方法。所以,我在 B 中只需要处理来自 A 和 I2 的东西。
【问题讨论】:
-
不确定这是否有帮助,但不要将 A 作为抽象类,而是考虑将其作为接口并将其方法实现为扩展方法。
-
@Raphaël Althaus:因为我需要访问 B 类中 A 的属性和方法。
-
你想如何使用传递的对象?作为 A 类还是作为 I2 接口?
-
@Alexandr Mihalciuc:两者同时进行。否则很容易实现。
标签: c# interface parameter-passing multiple-inheritance abstract