2010-12-08 30 views
0

Je suis la conception d'une API en C#, et une fonction que j'ai besoin est quelque chose le long des lignes de:Utilisation des énumérations dans l'API

void CreateChild(string name, ChildType type); 

Où ChildType est défini comme:

public enum ChildType { Number = 0, Text = 1 }; 

Il devrait être assez explicite, mais essentiellement, il va créer un enfant de l'objet en question, et le type de valeur que l'enfant contient sera une chaîne ou un double basé sur la valeur de l'enum.

L'énumération ChildType est publique, donc, je suppose, serait accessible aux utilisateurs de l'API. Mon problème est que certaines langues ne comprendront pas l'énumération dans la signature et ne pourront pas programmer vers cette API. Est-ce que cela vous préoccupe ou mes craintes sont-elles infondées?

+2

Je suppose que vous voulez en savoir plus sur l'écriture du code conforme CLS, ce que je ne connais pas très bien. Un rapide google montre que les énumérations sont supportées par le système de type commun dans le .NET Framework: http://msdn.microsoft.com/en-us/library/zcx1eb1e.aspx – blizpasta

+0

Vous pouvez ajouter l'attribut CLSCompliant à votre assembly et laisser le compilateur le vérifie pour vous. –

+0

Dans ce cas particulier, vous devriez envisager de séparer 'CreateNumberChild (string)' et 'CreateTextChild (string)', ce qui pourrait être un peu plus utilisable. (En supposant que le cas d'utilisation normal consiste à coder en dur le ChildType au moment de l'appel.) –

Répondre

2

Tant que vous avez de bons mappages des valeurs entières à ce qu'ils signifient, vous devriez être en clair. Toutes les langues qui n'ont pas de concept d'énumération peuvent toujours s'y référer par la valeur entière.

Soyez prudent lorsque vous utilisez l'attribut [Flags], car cela aligne la définition d'une énumération. Nous générons automatiquement un SDK dans plusieurs langues, y compris Java, et nous devons brouiller un peu quand nous réalisons que certaines de nos propriétés sont [Flags], mais étant mappées à des enums réguliers à la fin de Java, Java ne comprend pas les valeurs combinées.

0

La bibliothèque de classes de base du .NET Framework lui-même comporte de nombreuses méthodes qui utilisent des énumérations en tant que paramètres (par exemple, string.Equals(string, StringComparison)). Les principaux langages .NET les comprennent certainement. Tout langage qui n'a pas enums pourrait potentiellement les simuler avec des constantes nommées.

Je pense que l'utilisation d'une énumération dans une API publique ne poserait pas de problème pour d'autres langues.