在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
隐藏与虚方法调用 子类要隐藏父类的同名方法,推荐在子类中使用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开始算)为真正要调用的方法。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论