C#:简述虚方法和抽象类方法其子类的重写同异点

C#:简述虚方法和抽象类方法其子类的重写同异点

在讲解标题内容之前先简单分析虚方法和抽象类的定义
虚方法(virtual)是有方法体的,它是一个完整的函数,可实现输入,什么时候需要附加virtual来修饰一个方法(在其子类需要使用同种方法即数据类型和返回类型都相同)
如大多入门书籍中介绍的一段代码

namespace virtual
{
    public class Elanguage //此处没有其他意思,假设目前通用语言为英语,所以作为父类
    {
        public virtual void Say()
        {
            Console.WriteLine("Hello World!"); 
        }
    }
    public class Clanguage : Elanguage
    {
        public override void Say()
        {
            base.Say();
            Console.WriteLine("你好,世界!");
        }
  }
    class Program
    {
        static void Main(string[] args)
        {
            Clanguage cl = new Clanguage();
            cl.Say();
            Console.ReadKey();
        }
    }

然后输出的界面呢这边就不加以运行了,大多书籍中都有这个实例,主要是理解虚方法的作用和使用情况。这边着重介绍的还是抽象类,如同其名字一样概念也稍微抽象。

抽象类使用情况:

抽象类的意义可以算是夹在接口和类之间。
1:假设需要一个接口来实现某些方法和属性,但是需要在接口中包含一些代码,使得派生类中不需要重复的实现某些方法,对于这种情况,我们所需要的就不是一个接口而已了,这个时候就需要使用抽象类。
2:举例如猫叫,狗叫,羊叫,驴叫,这些子类可以归给一个基类动物,但是在动物基类中是无法具体说明动物怎么叫的,此时就区别于虚方法。要使用抽象类在animal 中些一个方法public abstract void bark(); 不需要书写方法体。

抽象类不仅可以获得接口的一些特性,同时还可以像正常类一样在其中编写代码,
所以

  • 抽象类需要符合接口的特性定义。
  • 抽象类是无法创建实例的,即无法new
  • 抽象类中的方法也是抽象的且子类必须override

接口中的方法虽然简单,但是可以同时予以多个类继承,如常用的IEnumerator接口。
虚方法的重写父类方法其实没什么限制只有如下几点:
virtual修饰符不能与private、static、abstract、override修饰符同时使用。
override修饰符不能与new 、static、virtual修饰符同时使用
并且重写方法只能用于重写基类中的虚方法。

而抽象类的子类方法是需要自己通过书写方法体实现的且必须重写(除非子类也是一个抽象类)。

抽象类的实际运用可观看一些小程序。

感谢阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值