C#语言使用多态(接口与override) ——帮您剔除对面向对象多态性的疑惑
2012-08-11 18:49
363 查看
多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态.
● 编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
● 运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现或者接口。
编译时多态即函数重载,我这里不多说了以下主要是通过override和Interface实现的多态。
一、Override。首先来创建三个类,一个是父类Base,其他两个是继承于Base的A类和B类,代码如下
View Code
运行结果和上面的类似,虽然类型相同,但是是谁的实例就调用谁的方法,彼此独立。
多态的运用场景很多,特别是在设计模式当中,几乎是离不开多态,但是并不是说继承就很棒,如果我们的程序有很深的继承层次,将会提高耦合度,程序则变得复杂。我们使用多态的思想就是,抽象他们的共同点,不去考虑他们的具体实现。
理论的东西我就不罗嗦了,这里给一个实际当中使用的例子
/article/5102263.html
● 编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
● 运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现或者接口。
编译时多态即函数重载,我这里不多说了以下主要是通过override和Interface实现的多态。
一、Override。首先来创建三个类,一个是父类Base,其他两个是继承于Base的A类和B类,代码如下
View Code
static void Main(string[] args) { interfaceDemo(); } static void interfaceDemo() { //创建一个接口的数组 IBase[] bases = new IBase[] { new C(), new D() }; foreach (var item in bases) { item.Method(); } }
运行结果和上面的类似,虽然类型相同,但是是谁的实例就调用谁的方法,彼此独立。
多态的运用场景很多,特别是在设计模式当中,几乎是离不开多态,但是并不是说继承就很棒,如果我们的程序有很深的继承层次,将会提高耦合度,程序则变得复杂。我们使用多态的思想就是,抽象他们的共同点,不去考虑他们的具体实现。
理论的东西我就不罗嗦了,这里给一个实际当中使用的例子
/article/5102263.html
相关文章推荐
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
- C#基础总结之八面向对象知识点总结-继承与多态-接口
- 面向对象思想 - 关于对象(材料来自thinking in Java,这些东西是跟C#相通的,跟语言无关)
- php面向对象中抽象类与接口的使用:
- 面向对象之多态、多态性(day7)
- java面向对象- 多态性的体现和使用
- 面向对象高级——接口的基本概念和对象的多态性
- 05.面向对象(二)【单例】【继承】【多态】【接口】【final】【内部类】
- 面向对象之抽象、接口、多态
- C#基础学习之【3】多态与静态对象的使用1
- 黑马程序员-JAVA面向对象之抽象、接口、多态
- 黑马程序员--面向对象学习---接口、多态、内部类、异常
- 黑马程序员--------java面向对象 继承、接口、多态、Object类
- .Net学习笔记6-C#面向对象基础3 继承多态
- 面向对象基础1:多态.接口
- 一个经典实例理解继承与多态原理与优点(附源码)---面向对象继承和多态性理解得不够深刻的同学请进
- 面向对象高级——instanceof关键字的使用以及抽象类与接口的应用
- 面向对象设计三大原则(封装变化点,对接口进行编程,多使用组合而不是继承)
- 【Go语言】面向对象扩展——接口
- php学习笔记---面向对象中[接口]与[多态性]的应用