【发布时间】:2013-01-17 22:58:57
【问题描述】:
我正在尝试在 C# 中实现以下内容,以便我可以强制初始化父类中的某些事件委托和变量,或者我会改用接口。显然下面的语法不正确。
具体的类是 Class1 & class 2。
这里的想法 MyClass 是一个按钮,它是一个图像,它是别的东西。
编辑: " 我明白 selectable 和其他不是对象而是状态。我真正想做的是编写代码以适当的方法维护可选择的状态,因为它将是对所有这些都相同。即在单击事件(单击位置)上,根据我的边界框检查我是否被单击,将状态更新为选中。我在 XNA 中,这是 ac# 轮询环境,我正在尝试制作尽可能将 GUI 作为事件驱动,如果这有意义吗?”
public abstract class Class1
{
private int NumberNeededForMethod;
private void methodThatOccursWhenEventHappens(int NumberNeededForMethod)
{
// stuff using NumberNeededForMethod;
}
private Class1(int NumberNeededForMethod)
{
MethodDelegate += methodThatOccursWhenEventHappens(int
NumberNeededForMethod)
;
}
}
public abstract class Class2
{
private int NumberNeededForMethod2;
private void methodThatOccursWhenEventHappens2(int NumberNeededForMethod2)
{
// stuff using NumberNeededForMethod2;
}
Class2(int NumberNeededForMethod2)
{
MethodDelegate += methodThatOccursWhenEventHappens(int NumberNeededForMethod2);
}
}
public class ClassThatIsBothClass1andClass2: Class1, Class2
{
ClassThatIsBothClass1andClass2( int NumberNeededForMethod1, int NumberNeededForMethod2) : Class1(NumberNeededForMethod1),Class2(NumberNeededForMethod2)
{
}
}
【问题讨论】:
-
通常的方法是使用组合而不是继承。 (例如,
ClassThatIsBothClass1andClass2将继承自Class1和 containClass2。) -
并使用接口。例如。有 IBooth : IFirst, ISecond。然后有一个类 Both 实现 IBoth 并在其中有两个类型为 First 和 Second 的对象,它将方法调用和/或属性值转发到。
-
(感谢大家的回复)我正在学习并努力做到这一点。 svick,请参阅下面我对构图的想法,并请回复,我只是想在以后解决这个问题。还有亚历克斯,我希望能够轻松地将这些东西组合在不同的地方,我有两个以上,所以我最终会为类的每个组合制作大量的接口包装器。
-
但是您不必编写大量 ifc 包装器,您可以(并且应该)仅出于特定目的引用该对象,例如您应该编写您的方法,以便它们引用最小公分母,例如
DoSomethingToIFirst(IFirst first)。然后,如果您有一个可选择的,它实现ISelectable(除其他外),您可以并且应该仅在其他地方引用它。如果你用这种方式编码,你很少需要ISelectableFocusableMovableImage。
标签: c# inheritance interface abstract-class multiple-inheritance