我正在尝试在C#中实现以下内容,以便我可以强制在父类中初始化某些事件委托和变量,或者我会使用接口。显然下面的语法不正确。
具体课程是Class1&第2课。
这个想法在这里MyClass是一个按钮,它是一个图像,它是别的东西。
编辑:“我理解可选择的和其他的不是对象而是状态。我真正想做的是编写在适当的方法中维护可选状态的代码,因为它将是对于所有这些都是一样的。即在点击事件(点击位置)上检查我是否是基于我的边界框点击,更新状态到选中。我在XNA,这是ac #polling环境,我正在尝试制作如果有意义的话,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)
{
}
}
答案 0 :(得分:2)
您可以使用合成来创建一个包装class1和class2的类,它是响应按钮引发的事件的东西。
答案 1 :(得分:2)
首先,当然,C#不支持多重继承,因此您实现的任何多态性都必须使用接口和组合来完成。
参考this comment: 可拖动 , 可选择 和 Ownable 是对象的属性。
图片 和 按钮 ,另一方面,是对象。
按钮不能 可拥有。
但是按钮可以 可拥有,可拖动或可选择。我想知道这些属性是不只是单个IAshtonControl
接口上的属性?
按钮可以想象也是一个图像。这很有道理。
由于C#缺少多重继承,因此您无法创建从AshtonButton
和Button
基类派生的Image
类。
可以做的一件事是创建一个实现AshtonButton
接口的IAshtonControl
类,该接口的实现可以委托给一个worker类的私有实例这对所有IAshtonControl
个实例都有共同作用。
或者,如果需要,您可以使用单独的IOwnable
,IDraggable
和ISelectable
接口。
无论哪种方式,都可以如实地表达AshtonButton
是IAshtonControl
,可拥有,可拖动,可选择的陈述。这些东西对于不同的控件可能有不同的含义(不同的行为/视觉效果),或者它们可能没有,但是你会隐藏接口背后的那些实现细节,这样你就可以用相同的方式以编程方式处理每个对象,而不管它的实现如何
将对象与其属性分开很重要,因为这会影响您对问题的思考方式。 Draggable 不是一件事,它是一件事的特征。
但如果您的目标是Button
也是Image
,那么某种类型的合成或委派就是实现这一目标的方法。如果您有IAshtonImage
接口,那么您将在AshtonImage
类和AshtonImageButton
类上实现该接口。然后,您在AshtonImage
类中拥有AshtonImageButton
类的内部实例(组合),并将对IAshtonImage
成员的调用委托给私有(组成)AshtonImage
实例,等等。