C#父类强制转换成子类,子类隐式转换成父类

看你将父类引用到的是父类对象还是子类对象了.
比如Person类是Student的父类
那么可以将p直接强制转换为Student:
Person p=new Student();
Student s=(Student)p;//正确   

如果你创建实例的时候没有将父类引用到子类对象,是无法转换的:
Person p=new Person();
Student s=(Student)p;//错误

 子类可以隐式的转换成父类.
  Student stu = new Student();
  Person p1 = stu;   //子类可以自动转父类 可以这么理解把子类的实例stu的地址赋值给了p1 ,p1的地址就是stu的地址,就可以调用

student类的方法,点出student类的属性

 

    ===========================================================

如果是父类转换子类的话  必须只可能是父类实例指向子类对象的时候子类

即Person p = new Student();  这种情况下可以把P对象强制转换。

你可能会问  这样就是创建的一个student对象 我干嘛不用student去创建? 这时候就是面向对象的编程的理解了。

比如:我的一个方法的参数需要传入一个学生,那么你只能传入一个student ,可是如果我的参数可以传入一个人person  ,那么我传进去一个学生student,或者穿进去一个老师teacher 都可以。

void Sing(Student s){.........}//这样一个方法你只能传进去一个学生对象说明这个学生怎么唱歌。。。如果要想要老师唱歌呢?

void Sing(Person p){.....}//这样的话 我可以传进去一个人学生,老师,工人等等,

你还问什么情况需要我转换

我们假设只有学生可以读书(微博)

那么void Reading(Studeng s){.....}、、你只能给他一个学生的参数,但是我现在手里的参数只有一个人Person p = new Person();可是这个参数我们不能穿进去啊,应为我们只知道他是一个人,而是什么人我们不知道,我们需要这个人是学生的时候才可以使用,那么当p = new Student() 这时候我们明确的知道他是一个人还是一个学生。所以我们就可以把他转换成学生放到参数里面。reading(studeng(p)); 当你明确知道这个父类对象的子类类型,确必须使用这个子类类型的时候,你就可以把他强制转换。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值