0

親クラスの特定のイベント デリゲートと変数の初期化を強制できるように、C# で以下を実装しようとしています。または、代わりにインターフェイスを使用します。明らかに、以下の構文は正しくありません。

具体的なクラスは Class1 & class 2 です。

ここにあるアイデア MyClass はボタンであり、それは画像であり、それは別のものです。

編集:「選択可能およびその他はオブジェクトではなく状態であることを理解しています。私が本当にやりたいことは、選択可能な状態を適切な方法で維持するコードを書くことです。それらのすべてで同じになるからです。つまり、クリックイベント(場所をクリック) 境界ボックスに基づいてクリックされたかどうかを確認し、状態を選択済みに更新します。ac# ポーリング環境である XNA を使用しており、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

コンポジションを使用して、class1 と class2 をラップし、ボタンによって発生したイベントに応答するクラスを作成できます。

于 2013-02-02T21:07:41.747 に答える
2

まず、当然のことながら、C# は多重継承をサポートしていないため、実装するポリモーフィズムは、インターフェイスと構成を使用して達成する必要があります。

このコメントを参照: DraggableSelectable、およびOwnableは、オブジェクトの属性です。

一方、 ImageButtonオブジェクトです。

ボタンを所有可能にすることはできません。

ただし、ボタン所有可能、ドラッグ可能、または選択可能にすることができます。IAshtonControlこれらの属性は、単一のインターフェイスの単なるプロパティではないのでしょうか?

Button はおそらく Image でもあります。それは完全に理にかなっています。

C# には多重継承がないため、と基本クラスAshtonButtonの両方から派生するクラスを作成することはできません。ButtonImage

できることの1 つは、インターフェイスAshtonButtonを実装するクラスを作成することです。IAshtonControlそのインターフェイスの実装は、すべてのインスタンスに共通の作業を行うワーカー クラスのプライベート インスタンスに委任できIAshtonControlます。

IOwnableまたは、それが必要な場合は、 、 、IDraggableおよびISelectableインターフェースを別々にすることもできます。

いずれにせよ、所有可能、ドラッグ可能、選択可能であるAshtonButtonというステートメントを正直に作成することが可能になります。IAshtonControlこれらのことは、コントロールごとに異なる意味 (異なる動作/視覚効果) を持っている場合もあれば、そうでない場合もありますが、実装の詳細に関係なく、各オブジェクトをプログラムで同じように処理できるように、インターフェイスの背後にある実装の詳細を非表示にします。 .

オブジェクトをその属性から分離することが重要です。これは、問題に対する考え方に影響を与えるためです。 ドラッグ可能はモノではなく、モノの特性です。

しかし、あなたの目標が である を持つことButtonである場合Image、何らかのタイプの構成または委任がそれを達成する方法です。IAshtonImageインターフェイスがある場合は、それをAshtonImageクラスとクラスの両方に実装しますAshtonImageButton。次に、AshtonImageクラス内にクラスの内部インスタンス (構成) を作成し、メンバーへの呼び出しをプライベート (構成済み)インスタンスにAshtonImageButton委任します。IAshtonImageAshtonImage

于 2013-02-02T21:57:59.147 に答える