代码之家  ›  专栏  ›  技术社区  ›  HotTester

对于命名空间在.net中可以拥有的类的数量有限制吗?

  •  14
  • HotTester  · 技术社区  · 15 年前

    8 回复  |  直到 15 年前
        1
  •  25
  •   Steven    15 年前

    我试过了:我只是构建了一个包含1000000个类型的程序集,没有任何问题。但是,在5000000时,C#编译器耗尽了内存:-)。

        2
  •  27
  •   Philip Rieck    15 年前

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

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

    我敢肯定,如果你有足够的类型,你可以运行编译器或运行时的内存,但这是一个物理限制,而不是一个规范-这可能并不重要,如果他们在同一个名称空间与否。

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

        3
  •  10
  •   Community Mohan Dere    6 年前

    This source 他说

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

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

        4
  •  5
  •   Oded    15 年前

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

        5
  •  3
  •   schoetbi    15 年前

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

        6
  •  3
  •   Wonko the Sane    15 年前

    至于“应该有多少”这个问题,答案和.Net中的大多数问题一样,都是“视情况而定”。这个问题没有明确的答案——基本上,您希望在逻辑上将您的解决方案划分为与功能或目的相关的项目——任何在您的特定情况下和您的特定爱好上有意义的项目。

        7
  •  2
  •   oɔɯǝɹ    15 年前

        8
  •  2
  •   Jon Hanna    15 年前

    好吧,类名必须适合一个字符串。只有一些有效的字符,所以把它作为一个非常粗略的猜测850000,因为我不必费心去计算UCS中不同类中的字符数,这将-在一个字符长度的名称空间中-给出85000x10737418213的限制!x10737418213!。但是,VB.NET只能处理1023个字符的名称,因此将其限制为85000x1021!x1021!而C#只能处理511个字符的长名称,所以85000x509!x509!

    我没有一个.NET4.0框架,所以计算这些方程所需的大型数值计算现在太复杂了

    85000可能还算宽裕,但表意字符通常在Lo类中,这在类名中是允许的,它们填充了一大块指定的代码点。在任何情况下,无论实际值是多少,这都会随着以后的Unicode版本而增加。

    不管怎样,在这一点之前,各种各样的技术限制,甚至物理限制都会被击中,但是,在那之前,我们击中了有目的的限制。编译器不存在名称空间,人类存在名称空间。如果没有名称空间,而编码人员只是保证永远不会重用名称,那么编译器也可以处理得很好(事实上,也许更好)。名称空间的存在是为了让人类有合理大小(可学习大小)的类型组来处理。