c# 中基类变量指向派生类对象的实例化

      c# 中基类变量指向派生类对象的实例化

1.      层次结构(针对构造函数)

要实例化的类的构造函数本身不能初始化类,还必须调用基类中的构造函数。所以引入层次结构进行构造。

层次结构的构造是:先找到要实例化的类的构造函数,再找到并默认他父类的构造函数,再往上找到system.object基类的构造函数,当上面再也没有类时。从这个顶层的类开始下发构造函数的执行。

2.      对象初始化顺序

子类的属性或字段----->基类的属性或字段----->基类的构造函数----->子类的构造函数

a)     先变量后构造函数。变量先被初始化,然后构造函数被执行

b)     先静态化后实例化。当一个类被访问时,静态变量和构造函数最先被初始化.接着是对象的实例化变量和构造函数被初始化

c)      先派生类后基类。对于变量和静态构造函数,派生对象在基对象之前被初始化.比如C类派生自B类,B类派生自A类,那么变量和静态构造函数被初始化次序是C-B-A.

d)     除了实例构造函数。对于实例构造函数,基类构造函数在派生类构造函数之前执行,实例构造函数被执行次序是A-B-C.

e)     不要假定变量的次序。Fields依据它们在源文件中的声明的顺序依次初始化.然而,自从程序员和工具可以随意安排变量的声明后,你不应该在依靠变量任何特别的次序初始化

f)      对虚方法用两个阶段的构建。避免从一个构造器调用虚方法. 如果在初始化一个对象时需要调用一些虚方法,应在完整构造该对象的地方使用两阶段的构建,并随后调用已构造对象的初始化方法。

3.     root = new Child();  这个方法其实是面向对象方面的知识。

基类的对象当然不能访问派生类的成员了,虽然实际上是个child对象,但其类型是parent向上转换后已经屏蔽了对派生类成员的访问

root这个对象,会忽略child类的其他派生方法,只有重写方法受到影响。

 

转载于:https://www.cnblogs.com/cocole/archive/2009/07/22/1528755.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值