[C#基础知识]关于虚函数Virtual 及 抽象函数Abstract

原创 2012年04月07日 09:49:27


Virtual

虚函数是多态的前提和保证

  被标注为virtual的函数可以被继承类重写(override),并且可以在运行时动态调用相应的方法(多态)。

  没有标注为virtual的非虚方法,在继承类中虽然不能通过override重写方法,但是也可以声明一个同名方法的,不过不具备多态的性质!



有两个类如下:

    public class SuperClass
    {
        public void Display()//not virtual
        {
            Console.WriteLine("I'm super");
        }

        public virtual void Vdisplay()
        {
            Console.WriteLine("I'm superVVV!!!");
        }
    }

    public class LowerClass : SuperClass
    {
        public void Display()//new public void Display();和父类中的方法同名,却不具备多态的性质
        {
            Console.WriteLine("i'm lower");
        }
        public override void Vdisplay()//重写了父类中的方法
        {
            Console.WriteLine("I'm lowerVVV");
        }
    }

主函数及输出如下:

        static void Main(string[] args)
        {
            //这里一切正常
            LowerClass l = new LowerClass();
            l.Display(); //输出:I'm lower
            l.Vdisplay();//输出:I'm lowerVVV

            //问题在下面:
            SuperClass s = new LowerClass();
            s.Display(); //输出:I'm super (!!!注意:此处并没有多态的影子,而是直接调用了父类SuperClass的Display()方法)
            s.Vdisplay();//输出:I'm lowerVVV
        }


Abstract

abstract抽象方法则更像是一个接口(Interface)方法

被标注为abstract的方法不能有具体的实现!

而且如果有方法被标注为abstract, 则这个类需要被标注为abstract


具体关于virtual 和 abstract的区别可以参看:http://www.cnblogs.com/MayGarden/archive/2010/04/04/1704279.html


相关文章推荐

Return to the Basic - 纯虚函数(pure virtual)和抽象类(abstract class)

纯虚函数(pure virtual function)是指在基类中声明但是没有定义的虚函数。 通用形式: virtual type func-name(parameter-list)=0; ...

虚函数和抽象类基础知识

一、虚函数作用虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。当把基类的某个成员函数声明为虚函数后,允许在其派生类中对该函数重新定义,赋...

C#基础知识系列七(base、this、new、override、abstract、virtual、static)

前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base、this、new、override、abstract、virtual以及针对static字...

C#中修饰符用法“virtual(虚拟函数)、override(函数复写)、static(静态函数)、abstract(抽象函数)、sealed(密封函数)”

1、virtual用于修饰方法、属性、索引器或者事件声明,并使它们可以在派生类中被重写。virtual不能与static、abstract、private或者override修饰符一起使用。 声...

C#虚函数virtual详解

在面向对象编程中,有两种截然不同的继承方式:实现继承和接口继承。在实现继承时候,在Java中,所有函数默认都是virtual的,而在C#中所有函数并不默认为virtual的,但可以在基类中通过声明关键...

C#虚函数virtual详解1

本文对C#虚函数virtual进行详解。   一、OOP的目标   使用面向对象的开发过程就是在不断地抽象事物的过程,我们的目标就是抽象出一个高内聚、低偶合,易于维护和扩展的模型。   ...

区分C#中的Abstract函数和Virtual函数

发现很多朋友对于C#中的Abstract和Virtual函数区分得不是很清楚,下面我通过两段代码让大家看看这两者之间到底有什么区别~~ 开发环境: VS.net 2005 使用方法: 用以下代码覆...

C#基础知识系列五(构造函数)

前言   本节主要来学习下实例构造函数、私有构造函数和静态构造函数。   构造函数的作用:   1、当一个类在new实例化对象时,可调用构造函数进行初始化对象。   2、不带参...

C#基础知识复习2:值和引用-接口-类型转换-异常-函数返回值-对象相等-重载-字符串-垃圾回收-集合

1、值类型引用类型(1)值类型均隐式派生自System.ValueType数值类型、bool、结构、枚举查看IL,隐式继承自ValueType(2)引用类型派生自System.Object字符串、数组...

纯虚函数和抽象类的实例

  • 2015年04月14日 19:33
  • 1.67MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[C#基础知识]关于虚函数Virtual 及 抽象函数Abstract
举报原因:
原因补充:

(最多只允许输入30个字)