2010-12-08 7 views
0

ich eine API in C# bin die Gestaltung, und eine Funktion, die ich brauche, ist etwas entlang der Linien von:Verwendung von Aufzählungen in API

void CreateChild(string name, ChildType type); 

Wo ChildType ist definiert als:

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

Es sollte ziemlich selbsterklärend sein, aber im Wesentlichen wird es ein Kind des fraglichen Objekts erstellen, und der Typ des Werts, den Kind enthält, wird entweder eine Zeichenfolge oder ein Doppel sein, basierend auf dem Wert der Aufzählung.

Die ChildType Enum ist öffentlich, also nehme ich an, würde für Benutzer der API zugänglich sein.

Mein Anliegen ist, dass einige Sprachen die Enum in der Signatur nicht verstehen und nicht auf diese API programmieren können. Ist das etwas, worum es sich handelt, oder sind meine Ängste unbegründet?

+2

Ich denke, dass Sie mehr über das Schreiben von CLS-Compliant-Code wissen möchten, über den ich nicht viel weiß. Ein schnelles Google zeigt, dass Aufzählungen vom allgemeinen Typsystem in .NET Framework unterstützt werden: http://msdn.microsoft.com/en-us/library/zcx1eb1e.aspx – blizpasta

+0

Sie können das CLSCompliant-Attribut zu Ihrer Assembly hinzufügen und lassen Der Compiler überprüft es für Sie. –

+0

In diesem speziellen Fall sollten Sie in "CreateNumberChild (string)" und "CreateTextChild (string)" unterscheiden, was ein wenig nützlicher sein könnte. (Angenommen, der normale Anwendungsfall besteht darin, den ChildType zum Zeitpunkt des Aufrufs fest zu codieren.) –

Antwort

2

Solange Sie gute Abbildungen der ganzzahligen Werte zu, was sie bedeuten, sollten Sie im Klartext sein. Sprachen, die kein Enum-Konzept haben, können sich immer noch auf den Integer-Wert beziehen.

Seien Sie vorsichtig bei der Verwendung des Attributs [Flags], da es die Definition einer Aufzählung faltet. Wir generieren automatisch ein SDK in mehreren Sprachen, einschließlich Java, und mussten ein wenig scrambeln, als wir feststellten, dass einige unserer Eigenschaften [Flags] waren, aber auf Java-Ende regulären Enums zugeordnet waren, sodass Java kombinierte Werte nicht verstand.

0

Die Basisklassenbibliothek des .NET Framework selbst hat viele Methoden, die enums als Parameter verwenden (z. B. string.Equals(string, StringComparison)). Die Hauptsprachen von .NET verstehen sie sicher. Jede Sprache, die keine Enums enthält, könnte sie möglicherweise mit benannten Konstanten simulieren.

Ich vermute, dass die Verwendung einer Enum in einer öffentlichen API kein Problem für andere Sprachen wäre.