关于子类是如何调用父类的非虚函数的疑惑
在子类的方法表中只拷贝了父类的所有虚函数 这一点是看了一些资料知道的
但是这样的话 子类它是如何调用父类的非虚函数的呢???
我看到一些文章上是这么说的 “直接call 方法地址”
我比较愚昧 表示没有看懂啊
我的理解是如果是虚函数和非虚函数的调用方式不同 虚函数的调用是在运行时的时候才会去查找方法表 实现动态绑定
非虚函数我就不是很清楚了 产生很多疑惑
这个“直接call 方法地址” 是什么时候完成关联的??? 运行时?编译时?
说起编译时 大家别笑话我哈 我对“编译时”这个词不是很明白 这个编译时是指鼠标垫程序右击编译一下程序那个时候呢
还是指程序运行后jit的即时编译呢?????
擦 基础太弱了 唉 求大虾指教啊
[解决办法]
编译成IL的时候,这时候就可以确定元数据了。
[解决办法]
方法的地址就一个,不会被复制的,call是编译期就编译好了
[解决办法]
看一下IL会明白很多
[解决办法]
第一次call方法的时候去元数据表查方法IL 然后JIT编译IL为本地代码 CLR再将元数据表中方法的调用地址改为编译后本地代码内存地址