Есть ли ограничение на количество классов, которое может иметь пространство имен в .net? ?

Есть ли ограничение на количество классов, которое пространство имен может иметь в .net? Далее, каково рекомендуемое количество классов, которое должно быть в пространстве имен?

14
задан HotTester 10 August 2010 в 02:55
поделиться

7 ответов

Я попробовал: я просто без проблем построил сборку, содержащую 1 000 000 типов. Однако при 5 000 000 компилятору C # не хватило памяти :-).

24
ответ дан 1 December 2019 в 05:50
поделиться

Не указано максимальное количество классов «на пространство имен» - пространство имен на самом деле является лишь частью полного имени типа, а не логической сущностью в CLR.

Рекомендуемое число - все, что имеет смысл: используйте пространства имен для группируйте логически связанные классы вместе.

Я уверен, что если у вас достаточно типов, вы можете запустить компилятор или среду выполнения без памяти, но это физический предел, а не спецификация - и, вероятно, не имеет значения, находятся ли они в одном пространстве имен или нет. .

Обратите внимание, что, как указывает Стивен, одно и то же пространство имен также может присутствовать в нескольких сборках.

27
ответ дан 1 December 2019 в 05:50
поделиться

Насколько я знаю, такого ограничения не существует, точно так же, как не существует ограничения на количество классов, которые вы можете иметь.

Пространство имен - это просто часть полного имени класса.

5
ответ дан 1 December 2019 в 05:50
поделиться

Без ограничений. Возможное количество типов зависит от предметной области. Если в некой «папке» столько типов, то у вас нет никакой свободы. В моем приложении у меня есть пространство имен для сообщений в определенном протоколе, и у меня есть около 200 различных типов сообщений.

3
ответ дан 1 December 2019 в 05:50
поделиться

Физический предел может быть, а может и не быть, но вы должны достичь логического предела задолго до его достижения.

Что касается «сколько их должно быть», ответ, как и в большинстве случаев в .Net, - «это зависит от обстоятельств». На этот вопрос нет однозначного ответа - по сути, вы хотите логически разделить свое решение на проекты, связанные по функциональности или целям - что имеет смысл в вашем конкретном случае и для ваших конкретных вкусов.

3
ответ дан 1 December 2019 в 05:50
поделиться

Ну, имя класса должно помещаться в строку. Есть только несколько допустимых символов, так что, если принять это за 850000, потому что я не могу потрудиться подсчитать количество символов в различных классах в UCS, то это - в пространстве имен с именем длиной в один символ - даст ограничение в 850000x10737418213!x10737418213! Однако VB.NET может работать только с именами размером в 1023 символа, так что это ограничение составит 850000x1021!x1021! и C# может работать только с именами длиной в 511 символов, так что 85000x509!x509!

У меня нет фреймворка .NET4.0, поэтому математика больших чисел, необходимая для решения этих уравнений, слишком сложна, чтобы возиться с ней прямо сейчас ;)

85000 - это, вероятно, хорошо, но идеографические символы обычно находятся в классе Lo, который разрешен в именах классов, и они заполняют очень большой кусок назначенных кодовых точек. В любом случае, каково бы ни было реальное значение, оно будет увеличиваться с последующими версиями Unicode.

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

2
ответ дан 1 December 2019 в 05:50
поделиться

Вы всегда можете создать новую сборку с большим количеством классов в любом данном пространстве имен. Ни один компилятор практически не может обеспечить глобальное ограничение.

2
ответ дан 1 December 2019 в 05:50
поделиться