龙空技术网

编程:virtual方法或abstract方法有什么区别?

到底想咋样啊 205

前言:

目前各位老铁们对“关键字virtual”都比较关怀,大家都需要了解一些“关键字virtual”的相关文章。那么小编同时在网摘上收集了一些关于“关键字virtual””的相关资讯,希望看官们能喜欢,咱们一起来学习一下吧!

结论:

多个子类中有部分类行为相同,使用virtual方法在基类中提供默认实现

所有子类实现迥异,但他们应具有相同的行为,使用abstract关键字标记

使用场景:

virtual方法告诉子类:我很贴心地提供了默认实现,你可以直接使用我,如果你觉得我不够好,你可以重写我。

abstract方法告诉子类:虽然我没办法提供默认实现,但是我警告你,如果你继承了我你就必须实现我,否则你将无法通过编译。

概念:

virtual 关键字声明方法可以在派生类中被重写

abstract关键字声明方法必须由派生自抽象类的非抽象类实现

栗子:

    /// <summary>    /// abstract标记的类无法实例化    /// </summary>    public abstract class BaseClass    {        public string Property        {            get;            set;        }        //如果你继承了BaseClass你必须实现MustImplementMethod方法        public abstract void MustImplementMethod();        //如果你继承了BaseClass你可以根据需要重写YouCanOverride方法        public virtual void CanOverrideMethod()        {            Console.WriteLine("Hello World");        }        //普通方法        public void NormalMethod()        {            Console.WriteLine(this.Property);        }    }         /// <summary>    /// 子类    /// </summary>    public class ChildClass : BaseClass    {        /// <summary>        /// 如果继承了BaseClass,必须实现MustImplementMethod方法        /// </summary>        public override void MustImplementMethod()        {            throw new NotImplementedException();        }        /// <summary>        /// 如果继承了BaseClass,可以选择重写CanOverrideMethod方法        /// </summary>        public override void CanOverrideMethod()        {            base.CanOverrideMethod();            base.Property = "Hello World";            base.NormalMethod();        }    }

标签: #关键字virtual