C# 子類與父類相互轉換的問題 本帖最后由 zhouhappy 于 2010-07-21 10:56:04 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MyAbs ma1 = new MyClass1();//一个父类引用,指向了子类的对象MyClass1 myclass=(MyClass1)ma1;//引用中有object type pointer,是该引用指向的对象的类型;mal的type pointer是MyAbs,myclass是MyClass1 MyAbs ma1 = new MyClass1();由于MyClass1继承自MyAbs 所以MyClass1 is a MyAbs 所以上面可以转换。 下面的ma1本身就是MyClass1只不过穿了个MyAbs 的马甲,所以下面可以转换。 MyClass1 myclass=(MyClass1)ma1;如果又有MyClass2:MyAbs MyAbs ma2 = new MyClass2(); MyClass1 myclass=(MyClass2)ma2;这是不行的。。 |**引用****|******|******实例*****||******ma1|--\---|**************||*********|---\--|**************||*********|----->|new MyClass1()||**myclass|---/--|**************| 好,那new MyClass1()的实例里存放的是什么?有没有基类MyAbs的实例? 他的先天性残疾【abstract 】注定他不可能有实例。。看实例是谁的就看new的是什么。。 再给你解释一下。就好比有个女人A先天性残疾,没有卵巢,但有子宫。有个女人B有卵巢但木有子宫。两个人合计生孩子的事,就把B的受精卵放到A的子宫,最后生下来个孩子。刚开始孩子管A叫妈,但后来经过DNA鉴定,孩子的妈成了B 肯定没有,可以理解为MyClass1是MyAbs的一个形态.广州程高级序员群 52866175 欢迎各位广州的同行 (继承"聊天"基类,实现"技术讨论"接口) a在栈中分配,指向堆中的一个对象B这个对象继承了父类A(B中包含A)但编译器对于a来说只指向了对象B中的对象A你调用方法时候只能调用A中的成员。对于方法来如果子类重写了,那么会调用子类方法。这也是所谓的多态。 MyAbs ma1 = new MyClass1(); 对于编译器来说-逻辑上new MyClass1()能够被认为可以是MyAbs的一个形态就可以通过 运行的时候 我觉得这句就基本没有作用了 C#下没有VARIANT_BOOL类型的定义怎么办? oracle存储过程中判断记录数 如何用事务对TableAdapter1.Update(DataSet)进行提交或回滚 Remoting如何调用远程的DLL dataset Update的问题,SKS 在C#中的ContextMenu中,在满足一定条件时,如何使快捷菜单不显示出来? 类从文件中删除,调试出错????? 取DataSource的问题 手机运行linux 哪位大侠给解释一下接口吧,能具体做些什么呢? 外接程序(addin)自定义图标、绑定快捷键 c# 时间处理
//一个父类引用,指向了子类的对象MyClass1 myclass=(MyClass1)ma1;
//引用中有object type pointer,是该引用指向的对象的类型;mal的type pointer是MyAbs,myclass是MyClass1
由于MyClass1继承自MyAbs 所以MyClass1 is a MyAbs
所以上面可以转换。 下面的ma1本身就是MyClass1只不过穿了个MyAbs 的马甲,所以下面可以转换。
MyClass1 myclass=(MyClass1)ma1;如果又有MyClass2:MyAbs
MyAbs ma2 = new MyClass2(); MyClass1 myclass=(MyClass2)ma2;
这是不行的。。
|******ma1|--\---|**************|
|*********|---\--|**************|
|*********|----->|new MyClass1()|
|**myclass|---/--|**************|
看实例是谁的就看new的是什么。。
就好比有个女人A先天性残疾,没有卵巢,但有子宫。
有个女人B有卵巢但木有子宫。
两个人合计生孩子的事,就把B的受精卵放到A的子宫,最后生下来个孩子。
刚开始孩子管A叫妈,但后来经过DNA鉴定,孩子的妈成了B
肯定没有,可以理解为MyClass1是MyAbs的一个形态.
广州程高级序员群 52866175 欢迎各位广州的同行 (继承"聊天"基类,实现"技术讨论"接口)
这个对象继承了父类A(B中包含A)
但编译器对于a来说只指向了对象B中的对象A
你调用方法时候只能调用A中的成员。
对于方法来如果子类重写了,那么会调用子类方法。
这也是所谓的多态。
对于编译器来说-逻辑上new MyClass1()能够被认为可以是MyAbs的一个形态就可以通过
运行的时候 我觉得这句就基本没有作用了