命名空间在.net中可以拥有的类数量是否有限制?

时间:2010-08-09 19:36:28

标签: c# .net asp.net vb.net

命名空间在.net中可以拥有的类数量是否有限制?那么命名空间中应该有多少类?

8 个答案:

答案 0 :(得分:27)

“每个命名空间”没有指定的最大类数 - 命名空间实际上只是Type的全名的一部分,而不是CLR中的逻辑实体

建议的数字是有意义的:使用命名空间将逻辑相关的类组合在一起。

我敢肯定,如果你有足够的类型,你可以运行编译器或运行时内存,但这是物理限制而不是规范 - 如果它们在同一名称空间中可能无关紧要

请注意,正如Steven所指出的那样,您也可以在多个程序集中使用相同的命名空间。

答案 1 :(得分:24)

我试了一下:我刚刚建立了一个包含1,000,000种类型的程序集,没有任何问题。但是在5,000,000时,C#编译器内存不足: - )。

答案 2 :(得分:10)

我确信这会被埋没,但是你可以在dll中拥有非常有限数量的类。 This source

  

如果使用元数据标记在元数据表中标识类,并且元数据标记是四字节数,则这意味着程序集可以包含的类的数量小于3个字节的最大数量(第一个字节是与元数据表类型的连接)。 3个字节的最大数字是2 ^ 24-1或16777215。

     

因此,.NET程序集可包含的最大类(和类成员)数为16777215。

答案 3 :(得分:5)

据我所知,没有这样的限制,就像你可以拥有的课程数量没有限制一样。

命名空间只是该类全名的一部分。

答案 4 :(得分:3)

没有限制。可行的类型数量取决于问题域。如果某个“文件夹”有多种类型你有任何自由。在我的应用程序中,我有一个特定协议中的消息的命名空间,我有大约200种不同的消息类型。

答案 5 :(得分:3)

可能存在或可能没有物理限制,但在到达之前应该达到逻辑限制。

至于“应该有多少”,答案,就像.Net中的大多数一样,是“它取决于”。对此没有明确的答案 - 基本上,您希望在逻辑上将您的解决方案划分为与功能或目的相关的项目 - 无论在您的特定情况下是否有意义,以及您的特定品味。

答案 6 :(得分:2)

您始终可以在任何给定的命名空间中创建包含更多类的新程序集。没有编译器可以实际执行全局限制。

答案 7 :(得分:2)

嗯,类名必须符合字符串。只有一些有效的字符,所以把它作为一个非常粗略的猜测给出850000,因为我不能打扰在UCS中获取不同类中的字符数,这将 - 在一个字符长度名称的命名空间中 - 限制为850000x10737418213!x10737418213!但是,VB.NET只能使用1023个字符的大小,因此将其限制为850000x1021!x1021!和C#只能处理511个字符的长名称,所以85000x509!x509!

我没有.NET4.0框架,因此需要将这些方程式解决的大数值数学太过于恭维而无法立即使用;)

85000可能很好,但是表意字符通常在Lo类中,这在类名中是允许的,并且它们填充了分配的代码点中的大部分。在任何情况下,无论真正的价值是什么,都会随着以后的Unicode版本而增加。

无论如何,在此之前,所有技术甚至物理限制都会受到影响,但在此之前我们达到了有目的的限制。编译器不存在名称空间,它存在于人类中。如果没有命名空间,编译器也可以处理(实际上也许更好),并且只保证编码器永远不会重用名称。人类存在的命名空间具有合理大小(可学习大小)的类型组来处理。