c#基础学习之多态
程序员文章站
2024-02-19 11:18:40
最近在看一本书《你必须知道的.net》,书涵盖的内容比较多,对于c#,.net平台以往所学的零散东西有了慢慢的总结和新的认识。把一些基础的东西记录于此。
先说说多态吧:...
最近在看一本书《你必须知道的.net》,书涵盖的内容比较多,对于c#,.net平台以往所学的零散东西有了慢慢的总结和新的认识。把一些基础的东西记录于此。
先说说多态吧:
1.基类继承式多态
如书中所说,基类继承式多态的关键是继承体系的设计与实现。书中举了个简单的列子
复制代码 代码如下:
files myfile=new wordfile();
myfile.open();
myfile是一个父类files变量,保持了指向子类wordfile实例的引用,然后调用一个虚方法open,具体的调用则决定于运行时而非编译时。从设计模式的角度看,基类继承式多态体现了一种is-a方式,例如wordfile is-a files就体现在这种继承关系中。
2.接口实现式多态
区别于基类的继承方式,这种多态通过实现接口的方法约定形成继承体系,具有更高的灵活性。从设计模式的角度来看,接口实现多态体现了一种can-do关系。上述的文件加载器也可以这样实现
复制代码 代码如下:
ifileopen myfile=new wordfile();
myfile.open();
多态的运行机制:
从技术实现角度看,是.net的动态绑定机制成就了面向对象的多态特性。静态绑定在编译期就可以确定关联,一般是以方法重载来实现的;动态绑定则在运行期通过检查虚拟方法表来确定动态关联覆写的方法,一般以继承和虚方法实现。