-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 回答