-2

次の構造例があります。

public interface IWidget {
    void Draw();
}

public class SmallWidget : IWidget {
    public void Draw() {
        rectangle.Draw(WIDGET_WIDTH, smallWidgetHeight);
    }
}

public class MediumWidget : IWidget {
    public void Draw() {
        rectangle.Draw(WIDGET_WIDTH, mediumWidgetHeight);
    }
}

public class LargeWidget : IWidget {
    public void Draw() {
        rectangle.Draw(WIDGET_WIDTH, largeWidgetHeight);
    }
}

WIDGET_WIDTH変数は、インターフェイスのすべての実装で同じになりますIWidget。明らかに、インターフェイスでそれを定義することはできません。

これをどこで定義しconstますか?

4

3 に答える 3

1

すべてのウィジェットに共通の実装の詳細を持つ基本クラスを作成し、インターフェースから直接ではなく、この基本クラスからすべてのウィジェットを派生させます。このように、すべてのウィジェットはIWidgetインターフェイスに従う必要があり、共通の動作を一度定義できます。

public abstract class WidgetBase : IWidget {
    public const int WIDGET_WIDTH = 100;
    public abstract void Draw();
}

public class SmallWidget : WidgetBase {
    public override void Draw() {
        rectangle.Draw(WIDGET_WIDTH, smallWidgetHeight);
    }
}
于 2013-10-31T11:09:34.877 に答える
1

あなたが実際に欲しいものは、抽象クラスのように見えます

public abstract class Widget {

    public const WIDGET_WIDTH = 123;
    public abstract void Draw();
}

public class SmallWidget : Widget {
    public override void Draw() {
        rectangle.Draw(WIDGET_WIDTH, smallWidgetHeight);
    }
}
于 2013-10-31T11:11:00.860 に答える
1

このための抽象基本クラスを作成できます。個人的には、それは少し制約があると思います。私はおそらく、物事をもう少し分離する静的クラスを使用するでしょう:

public static class WidgetConsts
{
    public const int WIDGET_WIDTH = 666;
}
于 2013-10-31T11:11:03.217 に答える