app开发者平台在数字化时代的重要性与发展趋势解析
747
2022-09-11
C#面向对象--多态(cctv5)
一、对于继承自同一基类的多个不同派生类的实例,在运行时可以将它们赋值给基类类型的变量,访问该变量的同一个成员会根据该变量运行时类型的不同而产生不同的行为,这个特性即被称为多态(Polymorphism);多态允许以同一种方式访问同一个变量的成员而产生不同的行为;
1.在C#中,每个类型都是多态的,因为包括自定义类型在内的所有类型都继承自基类System.Object;
2.虚成员、抽象成员和重写成员、替换成员是多态的基础;
3.非抽象基类中可以将方法、属性、事件和索引器声明为虚成员并实现,抽象基类中可以将这些成员声明为抽象成员而不实现,派生类中可以通过override关键字重写这些虚成员或抽象成员提供差异化实现,这样会代替基类中的虚成员,此时无论在代码中调用编译时类型为基类或派生类的变量的成员,在运行时CLR都会根据变量的运行时类型是基类或派生类来判断调用基类中的原成员或派生类中的重写成员;
4.如果不想让基类中的虚成员被代替,则应该在派生类中通过new关键字隐藏此虚成员并提供新的实现,此时在代码中调用编译时类型为基类的变量的成员,在运行时CLR会调用基类中该方法的实现;在代码中调用编译时类型为派生类的变量的成员,在运行时CLR会调用派生类中该方法的实现;
使用方式:
5.通过隐式转换将派生类实例赋值给基类变量,再将该基类变量引用的对象通过显式转换或as运算符转换后赋值给派生类变量,此时该派生类变量引用的对象的所有数据和行为较最初的派生类实例相比不会发生任何改变,实际上,类的实例在类型转换过程中其类型不会发生任何改变,只是在调用过程中会根据引用该实例的变量的编译时类型执行不同的调用方式,会优先查找实例中变量的编译时类型所对应的实现;
使用方式:
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!
出处:https://cnblogs.com/minotauros/
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~