![]() |
1
42
首席执行官# 语言 不限制接口的数量。但有两个实际的限制。 首先,正如chibacity所指出的,当处理大量接口或极深层次结构的接口时,编译器最终将耗尽堆或堆栈空间。 即使我们解决了这些问题,仍然会有第二个问题。接口实现在InterfaceImpl表的元数据中编码。元数据表通常不能有超过2^24个成员,因此 全部的 程序集中所有类型实现的接口数必须小于约1600万个。 显然你在实践中永远不会遇到这些限制。别担心。 |
![]() |
2
15
您可以实现的接口数量受编译器可以处理的内容的限制。接口太多会导致C编译器中出现stackoverflow异常(错误 CS1647 ). 这将使我相信没有固定的限制,但在某些情况下,编译器只会爆炸,即数字将取决于编译器处理类时可用的堆栈空间。 这个限制可能也与编译器版本有关。以下代码可用于生成用于探测限制的测试用例。
|
![]() |
3
8
如果你问这个问题是为了实现很多接口,我会说你有一个严重的设计问题。 据我所知,除了你电脑的内存,没有别的限制。 |
![]() |
4
1
考虑它对编译器/运行时的实际意义
|
![]() |
5
1
我刚刚检查了Microsoft C语言规范版本4.0的当前版本,没有提到第1.6.4、§1.9、§10.1.4、§10.1.4.2和§13中的限制。§B.2.7中的语法也没有句法限制。 很明显,我没有读完整个500页,但我不知道文档中还有哪些地方提到了限制。 注意:这仅适用于Microsoft C,并且仅适用于4.0版。我没有检查Microsoft C的早期版本,也没有检查ECMA/isoc。而且,它只适用于C,CLI中可能有限制。 最后但并非最不重要的一点是,在Microsoft Visual C和novellmonoc中可能存在特定于实现的限制,在Microsoft和Mono的CLI实现(即CLR和Mono VM)中也可能存在特定于实现的限制。 但是,问题是关于C,而不是关于C的任何特定实现,也不是关于CLI,所以我很有信心声称一个类可以实现的接口数量是无限的。 |
![]() |
6
-6
有个限度 由于JIT将单个字节用作相关接口的类型表的索引器,因此只能使用255。 |