Смущены определением типа данных Enum? - PullRequest
0 голосов
/ 11 марта 2010

Как я знаю, я могу определить новый Enum DataFormat в классе моего проекта, Предположим, я этого не делаю, я могу сослаться на DataFormat из сторонней DLL. Тогда я тоже могу использовать Enum DataFormat из метаданных сторонней DLL.

Какая разница? И есть ли какое-либо руководство для определения нового Enum DataFormat? Спасибо.

    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,
    }
}

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Здесь нет «метаданных» - типы Enum по-прежнему являются типами. Если он уже существует в отдельной сборке, единственная причина, по которой вы захотите воссоздать его в другом проекте, - это если по какой-то конкретной причине вы не можете ссылаться на исходную сборку.

Если у вас есть две (идентичные или почти идентичные) версии одного и того же типа - любого типа - в любом решении, где «решение» включает в себя ссылочные сборки, то вы рискуете столкнуться с конфликтом или, по крайней мере, путаницей, для никакой ощутимой пользы, которую я вижу.

Если тип еще не существует, и вы спрашиваете, где он должен быть создан ... обычно тип живет там, где начинаются его зависимости. Если он просто будет сидеть во внешней сборке и ничего не делать, то его там не должно быть. С другой стороны, если другие классы во внешней сборке зависят от него, то он определенно должен входить туда или в одну из зависимостей внешней сборки, иначе вы, вероятно, в конечном итоге получите уродливую циклическую зависимость пространства имен, которую вы будете необходимо устранить (и это может быть очень трудно сделать позже в игре).

Итак, в основном: не определяйте свои собственные типы, идентичные уже существующему типу, если только у вас нет очень веской причины, и не определяйте какой-либо тип в проекте / сборке, где вы на самом деле не намереваетесь используйте это.

1 голос
/ 11 марта 2010

Общее правило, которому я хотел бы следовать, состоит в том, что вы определяете классы, перечисления, методы и переменные с наименьшей областью действия, необходимой для их работы. Таким образом, если к перечислению можно получить доступ только из одного класса, определите его как член этого класса. Если к нему обращаются за пределами класса, определите его за пределами класса.

...