![]() |
1
27
免责声明:
我写
它的设计是为了避免虚拟呼叫
具体示例:当编译器生成此序列的代码时:
…编译器查找一个名为
这对循环最重要,因此
优化还可能允许
(1)C++支持重写方法的返回值协方差。 |
![]() |
2
3
您将无法执行诸如重新引入getEnumerator之类的技巧:
创建适当的本地/特定的tenumerator |
![]() |
3
3
getEnumerator()方法不是虚拟的;您不能重写它。这是确保getEnumerator()始终存在的一种方法,总是采用一组固定的参数(在本例中为零),并且某些程序员不会将其用于后代类。任何使用Tenumerable或其后代的人都可以调用GetEnumerator()。 但是,由于将有不同的可数子代执行不同的操作,dogetEnumerator()允许程序员在结构内部进行更改。“virtual”允许重写该方法。“abstract”强制后代类实现该方法——编译器不会让您忘记。而且由于dogetEnumerator()被声明为受保护(至少在这个级别上),使用可数子代的程序员不能绕过getEnumerator()直接调用dogetEnumerator()。 |