关于C#中一些关于Inheritance和Polymorphism的事情……

  在面向对象的语言中,继承和多态是十分重要的两个特征。目前,C#和Java均为单继承多接口语言,能够有效利用面向对象的特征进行编程。其中继承是一个将类具体化的过程,继承深度越高,类就越具体。多态则是用不同的具体化方法实现同一种功能的接口,让父类具有子类的特征。同时多态可以实现代码的复用。

  1. virtual方法

    virtual方法定义基类中的虚函数,这种函数可以被子类继承,并在子类中被override成具有子类特性的新函数。比如:

        public virtual int sum(){}   //……在基类中

                       public override int sum(){}    //……在子类中

          注意,C#中的override关键字,在子类中覆盖函数,此时基类改变此函数,子类并不会发生变化,起到了保护的作用。

    2. new修饰符

        和override比较,new可以显示地隐藏从基类继承的成员函数。虽然都是使用子类自己的函数,但是new会隐藏掉、截断掉基类的函数,而override则会扩展基类函数的功能。下面看一个例子:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ConsoleApplication1
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             A objA = new D();
14             A objB = new B();
15             C objC = new D();
16             A objD = new A();
17             objA.Movie();
18             objB.Movie();
19             objC.Movie();
20             objD.Movie();
21 
22         }
23             class A {  
24                 public virtual void Movie() {
25                 Console.WriteLine("MikiMouse");
26                           }
27                      }
28             class B : A {
29                 public override void Movie () {
30                 Console.WriteLine("DisneyMovie");
31                          }
32                      }
33 
34         class C : B {
35                 public new virtual void Movie () {
36                 Console.WriteLine("Snow White");
37                         }
38                      }
39        class D : C {
40                 public override void Movie () {
41                 Console.WriteLine("Seven Dwarfs ");
42                         }
43                      }
44         
45     }
46 }

        其输出结果是:

 

        简而言之,new virtual相当于一个断点,截断了继承流。

原文地址:https://www.cnblogs.com/Dukechris/p/4380085.html