Использование перечислений в API - PullRequest
0 голосов
/ 08 декабря 2010

Я разрабатываю API на C #, и мне нужна одна функция:

void CreateChild(string name, ChildType type);

Где ChildType определяется как:

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

Он должен быть достаточно понятным, но по сути он создаст дочерний элемент рассматриваемого объекта, а тип значения, которое содержит дочерний элемент, будет либо строкой, либо двойным, в зависимости от значения перечисления. 1007 *

Перечисление ChildType является общедоступным, поэтому, я полагаю, будет доступно пользователям API.

Меня беспокоит то, что некоторые языки не будут понимать перечисление в подписи и не смогут программировать для этого API. Это то, что должно беспокоить, или мои опасения необоснованны?

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

Пока у вас есть хорошее отображение целочисленных значений на то, что они означают, вы должны быть в открытом виде.Любые языки, которые не имеют понятия enum, могут ссылаться на него целочисленным значением.

Будьте осторожны при использовании атрибута [Flags], так как он как бы запутывает определение перечисления.Мы автоматически генерируем SDK на нескольких языках, включая Java, и нам пришлось немного скремблировать, когда мы поняли, что некоторые из наших свойств были [Flags], но были сопоставлены с обычными перечислениями на конце Java, поэтому Java не понимала комбинированные значения.

0 голосов
/ 30 марта 2011

Библиотека базовых классов .NET Framework сама имеет много методов, которые используют перечисления в качестве параметров (например, string.Equals(string, StringComparison)).Основные языки .NET, безусловно, понимают их.Любой язык, в котором нет перечислений, потенциально может имитировать их с помощью именованных констант.

Я подозреваю, что использование перечисления в открытом API не будет проблемой для других языков.

...