在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子类都有其不同的代码实现,所以当用父类来引用这些子类时,同样的操作而可以表现出不同的操作结果,这就是所谓的多态. ● 编译时的多态性 ● 运行时的多态性 编译时多态即函数重载,我这里不多说了以下主要是通过override和Interface实现的多态。 一、Override。首先来创建三个类,一个是父类Base,其他两个是继承于Base的A类和B类,代码如下
View Code
class Base { public virtual void Method() { Console.WriteLine("我是父类的虚方法"); } } class A : Base { public override void Method() { Console.WriteLine("我是A类的重写父类方法"); } } class B : Base { public override void Method() { Console.WriteLine("我是B类的重写父类方法"); } } 然后在Main方法里面去调用它们
View Code
class Program { static void Main(string[] args) { overrideDemo(); } static void overrideDemo() { //创建一个父类的数组 Base[] bases = new Base[] { new A(), new B() }; foreach(var item in bases) { item.Method(); } } } 运行结果如下 发现父类的Method方法根本就没有运行,也就是数组虽然是Base类型,但是他们分别是A类和B类的实例,而这两个类对Method方法进行了override,因而执行的是他们重写的函数,而接口也是类似的,不同的是我们不需要override关键字。
View Code
public interface IBase { void Method(); } public class C : IBase { public void Method() { Console.WriteLine("我是C类实现接口的方法"); } } public class D : IBase { public void Method() { Console.WriteLine("我是D类实现接口的方法"); } } 调用示例:
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(); } } 运行结果和上面的类似,虽然类型相同,但是是谁的实例就调用谁的方法,彼此独立。 多态的运用场景很多,特别是在设计模式当中,几乎是离不开多态,但是并不是说继承就很棒,如果我们的程序有很深的继承层次,将会提高耦合度,程序则变得复杂。我们使用多态的思想就是,抽象他们的共同点,不去考虑他们的具体实现。 理论的东西我就不罗嗦了,这里给一个实际当中使用的例子 http://www.cnblogs.com/FreeDong/archive/2012/08/11/2627198.html
|
请发表评论