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

命名空间在.net中可以拥有的类数是否有限制? 还有什么是命名空间中应该有的类的推荐数量?

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

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

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

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

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

我确信这会被埋没,但是你可以在dll中拥有非常有限数量的类。 这个消息来源说

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

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

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

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

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

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

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

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

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

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

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

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