2010-09-02 4 views
1

Dans notre couche de données, nous devons créer des objets de style qui pourraient hériter leurs valeurs d'autres objets de style.Implémentation d'objets de style héritable en C#

Exemple de scénario 1:

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

Alors, quand il y a une liste de ces styles, un style avec un nom de parent doit hériter ses valeurs de style à partir de son parent.

Scénario 2:

class ConatiningType 
{ 
    Style BaseStyle; 
    Style MouseHoverStyle; 
} 

Dans le cas ci-dessus, le MouseHoverStyle doit hériter ses valeurs de la BaseStyle. Je suis sûr qu'il y a quelques modèles de conception recommandés pour ce scénario. Si oui, veuillez les indiquer.

+0

Connaissez-vous les propriétés de dépendance? – Gabe

+0

Essayez-vous de dupliquer l'héritage de style dans WPF? Je suppose que c'est pour WinForms? –

Répondre

1

Peut-être Style lui-même devrait avoir un 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; 
    } 
} 

avoir à utiliser le contrôle nul sur parentStyle est un peu ennuyeux, il est vrai :(Vous pouvez construire une version « par défaut » comme celui-ci, bien sûr:

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

Notez que le DefaultStyle serait encore ont une valeur nulle parentStyle (comme DefaultStyle serait nulle au cours de sa construction) mais si vous lui donniez des valeurs par défaut ("", 0 etc), il n'essaierait jamais de déférer à son propre parent inexistant.

+0

Merci, c'est une réponse parfaitement valide. Mais, je cherche un "pattern" beaucoup plus élaboré qui soit beaucoup plus évolutif et performant, qui prenne en compte beaucoup plus de scénarios de "inheritance de valeur" (est-ce le mot que je cherche?), Outre le 2 scénarios que j'ai décrits ci-dessus. Merci – rqtechie

+1

@rqtechie: Où voyez-vous les problèmes de performance? Il est difficile de suggérer des approches qui fonctionneront pour des scénarios que vous n'avez pas décrits ... –