码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2015-03-31 10:47:02      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

  在面向对象的语言中,继承和多态是十分重要的两个特征。目前,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相当于一个断点,截断了继承流。

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

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!