• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#学习——继承接口多态

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 

隐藏与虚方法调用

子类要隐藏父类的同名方法,推荐在子类中使用new声明。注意若不使用new关键字,当方法相同时,调用哪个方法由对象变量的类型决定。

class Parent
 

虚方法:virtual,override,子类可以重写父类方法,当方法相同时,调用哪个方法由对象变量的类型决定

继承关系下的字段访问:子与父有相同名字的字段,使用哪个,由对象定义时的类型决定,与引用无关(注意以上面方法调用的区别)

 

继承下的对象创建与销毁

构造函数的目的:初始化成员

子类在创建时,先初始化自身成员(静态字段在实例字段之前初始化),再调用父类的构造函数,上溯到Object,而Object构造函数为空,一般也就看不到了。(IL中可以看到)

 

类的静态构造函数,不会自动调用基类的静态构造函数。

 

 

继承关系下的内存模型

 

实例字段的布局

 

静态字段的内存布局

 

注意静态字段分布在不同的类型表中

 

 

 

继承的虚方法内存布局

 

虚方法的调用,是在运行时根据对象的真实类型决定,不是在编译时确定的,因此CLR对虚方法调用采用了动态分派(Dispatch)的方法

 

简单说,按同样的索引查不同的表。

 

接口的虚方法内存布局


 

虚方法调用时:

1,CLR先查Iother类型表,知道g()的方法表索引为0

2,再查调用此方法的MyClass1类型所对应的接口偏移表,知道Iother接口在表中的偏移量为6。

3,两个相加(0+6),知道了MyClass1方法表的第7行(从0开始算)为真正要调用的方法。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何加快C++代码的编译速度(转)发布时间:2022-07-14
下一篇:
lua与c++的相互调用入门篇发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap