2010-09-02 48 views
1

在我們的數據層中,我們需要創建可以從其他「樣式」對象繼承其值的「樣式」對象。在C中實現可繼承的樣式對象#

示例方案1:

class Style 
{ 
    string Name; 
    string ParentName; 
    // Other properties go here. 
} 

所以,當有這樣的樣式列表,與父母名稱的風格應該繼承它的樣式值從它的父

方案2:

class ConatiningType 
{ 
    Style BaseStyle; 
    Style MouseHoverStyle; 
} 

在上述情況下,MouseHoverStyle應該繼承它離BaseStyle值。

我確定這裏有一些推薦的設計模式。如果是這樣,請指出這些。

+0

您是否熟悉依賴屬性? – Gabe 2010-09-02 20:17:29

+0

您是否嘗試複製WPF中的樣式繼承?我認爲這是用於WinForms? – 2010-09-02 20:21:46

回答

1

也許Style本身應該有一個ParentStyle

class Style 
{ 
    private readonly Style parentStyle; 

    private string name; 

    public string Name 
    { 
     get { return name ?? (parentStyle == null ? null : parentStyle.Name); } 
     set { name = value; } 
    } 

    public Style(Style parentStyle) 
    { 
     this.parentStyle = parentStyle; 
    } 
} 

不必使用空支票parentStyle有些煩人,無可否認:(你可以建立一個「默認」的版本是這樣的,當然:

class Style 
{ 
    private static readonly Style DefaultStyle = new Style(null) { 
     Name = "", 
     ... 
    }; 

    private readonly Style parentStyle; 

    private string name; 

    public string Name 
    { 
     get { return name ?? parentStyle.Name); } 
     set { name = value; } 
    } 

    public Style(Style parentStyle) 
    { 
     this.parentStyle = parentStyle ?? DefaultStyle; 
    } 
} 

注意,DefaultStyle仍然有一個空parentStyle(如DefaultStyle會期間爲null的建設),但如果你給它實際的默認值(「」,0等),那麼它永遠不會試圖推遲到自己不存在的父項。

+0

謝謝,這是一個非常有效的答案。 但是,我正在尋找一個更具可擴展性和性能的更復雜的「模式」,考慮到「價值繼承」(我正在尋找的詞是什麼?上面概述的兩種情況。 謝謝 – rqtechie 2010-09-02 20:53:04

+1

@rqtechie:你在哪裏看到性能問題?很難建議適用於您未描述的場景的方法... – 2010-09-02 21:00:20