2013-10-31 46 views
-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

+0

在抽象類中? PS:接口聲明一個合約,而不是執行。 – zerkms

回答

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); 
    } 
} 
+0

我將其標記爲答案,因爲我沒有意識到我可以將接口實現標記爲抽象類中的抽象。我過去實現爲'class MyWidget:IWidget,WidgetBase',這是不好的。謝謝! – CodingIntrigue

+0

很高興爲您效勞。 –

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); 
    } 
} 
1

你可以創建這樣的一個抽象基類的東西。就我個人而言,我認爲這是一個有點約束。我可能會使用一個靜態類,它將事情分離得更多:

public static class WidgetConsts 
{ 
    public const int WIDGET_WIDTH = 666; 
}