2010-08-15 4 views
2

Je modélise une liste de clés de base de données fortement typées. Certains seront ints, des cordes, des GUIDs etc.Recherche d'un modèle de conception en C# pour une liste fortement typée

EDIT Ils sont fortement typés dans le sens que certaines des clés contiendra des valeurs entières, des chaînes, des UIDs etc.

Donc, si ma classe pour la clé était "Key" et ma liste était List<Key> Je cherche comment implémenter l'aspect fortement typé. Je ne veux pas utiliser de génériques car je ne pense pas que ce soit approprié ici (prouver que je me trompe).

Je pense à créer une classe "Key" et abstraite et à faire en sorte que chaque sous-classe implémente l'aspect fortement typé. Mais ce sera aussi désordonné. (voir ci-dessous)

Quelqu'un a-t-il de meilleures idées?

public abstract class RowKey 
{ 
    public string DbName { get; set; } 

    public abstract object GetTypedValue(); 
} 

public class IntegerRowKey: RowKey 
{ 
    public override object GetTypedValue() 
    { 
     return 1; 
    } 
} 
+2

Je suppose que les génériques * sont * la bonne solution ici, mais vous n'avez pas montré ce que vous voulez faire avec la liste. Essayez-vous d'avoir une liste de * type * de type rowkey, ou de type de clé potentiellement différent *? –

+0

Comment est-ce "fortement typé"? Comment utilisez-vous les clés? – SLaks

+0

L'idée était qu'ils pourraient être des types de clés potentiellement différents mais du même type (afin qu'ils puissent partager un comportement commun, c'est juste les types qui diffèrent). La raison pour laquelle je me gardais des génériques était que j'avais lu qu'une liste de différents types ne convenait pas aux génériques – AJM

Répondre

2

Pourquoi pensez-vous que les génériques sont inappropriés ici? Ils étaient à peu près inventées pour ce scénario:

public class RowKey<T> 
{ 
    public string DbName { get; set; } 
    public T GetValue(): 
} 
// Now use RowKey<int>, RowKey<string>, RowKey<Guid>, etc. 

Avoir une classe de base abstraite qui retourne object détruit sorte de l'idée d'être fortement typé, non?

éditer: ah, je vois ce que vous obtenez. Jetez un oeil à this question.

+0

Je suis d'accord avec le retour d'un type d'objet ruinant le typage fort . Cependant, si je veux avoir une liste de RowKeys, ils ne doivent pas tous être du même type, par exemple. Je ne pouvais pas mélanger RowKey et RowKey dans la même liste – AJM

+0

@AJM: voir modifier. :) – tzaman

Questions connexes