2010-03-11 9 views
0

Comme je sais que je peux définir un nouveau Enum DataFormat à la classe mon projet, Supposons, je ne fais pas cela, je peux référencer le DataFormat de la DLL tierce. Ensuite, je peux aussi utiliser l'Enum DataFormat à partir des métadonnées d'une DLL tierce.Vous ne savez pas à propos de la définition de type de données Enum?

Quelle est la différence? Et sont les lignes directrices pour définir un nouveau Enum DataFormat? Merci.

public enum DataFormat 
    { 
     SECS = 0, 
     S2_L = 4, 
     S2_B = 8, 
     S2_BOOLEAN = 12, 
     S2_A = 16, 
     S2_J = 20, 
     S2_U1 = 24, 
     S2_U2 = 25, 
     S2_U4 = 26, 
     S2_U8 = 27, 
     S2_I1 = 28, 
     S2_I2 = 29, 
     S2_I4 = 30, 
     S2_I8 = 31, 
     S2_F4 = 34, 
     S2_F8 = 35, 
     S2_STRING = 36, 
    } 
} 

Répondre

1

Il n'y a pas de "métadonnées" ici - Les types Enum sont toujours des types. Si une existe déjà dans un assembly séparé, la seule raison pour laquelle vous souhaitez le recréer dans un autre projet est s'il existe une raison spécifique pour laquelle vous ne pouvez pas référencer l'assembly d'origine.

Si vous avez deux versions (identiques ou presque identiques) du même type - n'importe quel type - dans une solution, où «solution» inclut des assemblages référencés, alors vous courez un risque réel de conflits ou au moins de confusion, pour aucun avantage tangible que je peux voir.

Si le type n'existe pas encore et vous demandez où il devrait être créé ... normalement un type vit où ses dépendances commencent. Si cela ne sert à rien de rester assis dans l'assemblée extérieure, alors il ne devrait pas être là. D'un autre côté, si d'autres classes de l'assembly externe en dépendent, alors il faut absolument y aller ou dans l'une des dépendances de l'assembly externe, sinon vous finirez probablement avec une dépendance d'espace de noms circulaire moche que vous aurez besoin d'éliminer (et cela peut être très difficile à faire plus tard dans le jeu). Donc, fondamentalement: Ne définissez pas vos propres types identiques à un type qui existe déjà, sauf si vous avez une très bonne raison, et ne définissez aucun type dans un projet/assemblage où vous n'avez pas vraiment l'intention pour l'utiliser.

+0

Merci beaucoup. –

1

La règle générale que j'aime à suivre est que vous définissez les classes, les énumérations, les méthodes et les variables avec la portée la plus petite nécessaire pour eux de travailler. Donc, si l'énumération n'est accessible qu'à partir d'une seule classe, définissez-la en tant que membre de cette classe. S'il est accédé en dehors de la classe, le définir en dehors de la classe.

+0

@codeka, Avec votre règle, Si je veux accéder à l'extérieur de la classe. Ensuite, je peux avoir deux choix: 1. Hors classe; Métadonnées 2.Interface. Quel est le meilleur? Je vous remercie. –