0

我正在尝试在 C# 中实现以下内容,以便我可以强制初始化父类中的某些事件委托和变量,或者我会使用接口。显然下面的语法不正确。

具体类是1类和2类。

这里的想法 MyClass 是一个按钮,它是一个图像,它是别的东西。

编辑: “我知道可选和其他不是对象而是状态。我真正想做的是编写代码以适当的方法维护可选状态,因为它们对所有人都是一样的。即点击事件(单击位置)检查我是否根据我的边界框单击,将状态更新为选中。我在 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)
    {

    }
}
4

2 回答 2

2

首先,当然,C# 不支持多重继承,所以无论你实现什么多态性都必须使用接口和组合来完成。

参考此评论DraggableSelectableOwnable是对象的属性

另一方面, ImageButton对象。

Button 不能是Ownable

但是按钮可以Ownable、Draggable 或 Selectable。我想知道的是这些属性是否不仅仅是单个IAshtonControl界面上的属性?

可以想象一个按钮也可以是一个图像。这很有意义。

因为 C# 缺少多重继承,所以您根本无法创建从基类和基类AshtonButton派生的类。ButtonImage

可以做的一件事是创建一个AshtonButton实现该接口的类,该IAshtonControl接口的实现可以委托给一个工作类的私有实例,该实例执行所有IAshtonControl实例共有的任何工作。

或者,如果需要,您可以有单独IOwnable的 ,IDraggableISelectable接口。

无论哪种方式,都可以真实地做出声明,即AshtonButton是一个IAshtonControl,是可拥有的,是可拖动的,是可选择的。对于不同的控件,这些东西可能具有不同的含义(不同的行为/视觉效果),或者它们可能没有,但是您可以将这些实现细节隐藏在接口后面,以便您可以以编程方式以相同的方式处理每个对象,而不管其实现如何.

将对象与其属性分开很重要,因为这会影响您思考问题的方式。 Draggable不是一个东西,它是一个东西的特性。

但是,如果您的目标是让 aButton也是 a Image,那么某种类型的组合或委托就是实现该目标的方法。如果您有一个IAshtonImage接口,那么您将在AshtonImage类和类上实现它AshtonImageButton。然后你有一个类的内部实例(组合),AshtonImageAshtonImageButton类中,并将对成员的调用委托给IAshtonImage私有(组合)AshtonImage实例,依此类推。

于 2013-02-02T21:57:59.147 回答
2

您可以使用组合来创建一个包含 class1 和 class2 的类,并且该类可以响应您的按钮引发的事件。

于 2013-02-02T21:07:41.747 回答