博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#虚方法和抽象方法的区别
阅读量:6614 次
发布时间:2019-06-24

本文共 1780 字,大约阅读时间需要 5 分钟。

一,如下例子

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DemoTest{    class Program    {        static void Main(string[] args)        {            B a = new B();        }    }    public class A    {        public A()        {            Say();        }        protected virtual void Say() {            Console.WriteLine("A");        }    }    public class B : A    {        protected override void Say()        {            Console.Write("B");        }    }}

结果:

 

输出的则是B

二,通过调试得出结论:

当B继承A时,并重写A中的方法,程序运行的时只会进入到B中重写的方法Say(),而不会进入A中的Say()

三,抽象方法和虚方法的区别

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace abstractOrvirtual{    class Program    {        static void Main(string[] args)        {            AbstractDemo ab = new Test();            ab.AbstractEvent();            ab.VirtualEvent();            ab.VirtualEvent2();        }    }    public abstract class AbstractDemo    {        public abstract void AbstractEvent();        //public abstract void AbstractEvent2()   //无法声明主体,因为它标记为 abstract        //{        //    Console.WriteLine("抽象方法");        //}        public virtual void VirtualEvent()        {            Console.WriteLine("虚方法");        }        public virtual void VirtualEvent2()        {            Console.WriteLine("虚方法");        }        // public virtual void VirtualEvent2();必须声明主体,因为它未标记为 abstract、extern 或 partial    }    public class Test : AbstractDemo    {        public override void AbstractEvent()  //抽象方法可以被重写        {            Console.WriteLine("抽象方法");        }        public virtual void VirtualEvent2()//虚方法可以被重写        {            Console.WriteLine("虚方法2");        }    }}

 

转载于:https://www.cnblogs.com/May-day/p/6724021.html

你可能感兴趣的文章