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

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

Ответы

Ответ 1

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

Ответ 2

Нет указанного максимального количества классов "для пространства имен" - пространство имен действительно является просто частью полного имени типа, а не логического объекта в CLR

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

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

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

Ответ 3

Я уверен, что это будет похоронено, но есть ОЧЕНЬ конечное число классов, которые вы можете иметь в dll. Этот источник говорит, что

Если класс указан в таблице метаданных с использованием маркера метаданных, а токен метаданных - четырехбайтовое число, это означает, что количество классов, которое может содержать сборка, меньше наибольшего числа на 3 байта ( первый байт является соединением с типом таблицы метаданных). Наибольшее количество из 3 байтов - 2 ^ 24 - 1 или 16777215.

Следовательно, максимальное количество классов (и членов классов), которое может содержать сборка .NET, составляет 16777215.

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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

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