码迷,mamicode.com
首页 > 其他好文 > 详细

虚方法(virtual)和抽象方法(abstract)的区别

时间:2016-09-28 08:00:45      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:c#、虚方法、抽象方法、

虚方法和抽象方法都可以供派生类重写。


  1. 虚方法必须有实现部分,抽象方法必须没有实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。如:


    class Program

    {

        static void Main(string[] args)

        {

            C c = new C();

            D d = new D();          

        }

    }


    abstract class A

    {

        public virtual void Sleep()

        {


        }       

        public virtual void N(); //报错,虚方法必须有实现部分(方法体).


        public abstract void M() //报错

        {


        }

        public abstract void Eat();//抽象方法必须没有实现部分(方法体)

    }


    class C : A

    {

        public override void Eat()

        {

            Console.WriteLine("Eat()被实现");

        }


        public override void M()

        {

            Console.WriteLine("M()被实现");

        }

    }


    class D : A  //报错,没有实现父类的抽象方法

    {

    }


2. 抽象方法只能在抽象类中声明;虚方法可以在抽象类中,也可以在非抽象类中。如:


    

    abstract class A

    {

        public virtual void Sleep()

        {


        }       


        public abstract void Eat();

    }


    class B

    {

        public virtual void Sleep() //虚方法可以在抽象类中,也可以在非抽象类中

        {


        }


        public abstract void Eat(); //报错,抽象方法不能在非抽象类中

    }


      

3. 抽象方法必须在派生类中重写(1.中class C 与 class D对比),这一点跟接口类似;虚方法可以在派    生类中重写,也可以不重写。虚方法在子类中重写时要加override。如:


    class A

    {

        public virtual void Sleep()

        {


        }             

    }


    class C : A

    {

        public override void Sleep()

        {

            Console.WriteLine("Sleep()被重写");      

        }

    }


    class D : A

    {

    }


虚方法(virtual)和抽象方法(abstract)的区别

标签:c#、虚方法、抽象方法、

原文地址:http://745559847.blog.51cto.com/11658719/1857111

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