抽象类与密封方法

抽象类

在上一篇文章里,我们知道基类里的函数能够被重写,那么要是在一个程序里,他的函数在每个子类里全部都要被重写,该基类的函数可不可以不去实现,只定义一个函数呢?
我们可以定义一个抽象函数,抽象函数只有函数定义没有函数体,可以说抽象函数本身也是虚拟的virtual(只有函数,没有函数体实现)

当一个类里有抽象函数的时候,这个类也必须是抽象类,抽象类不能实例化,但是抽象类可以同时有普通函数和抽象函数。
在前面我们说过类相当于一个模板,所以抽象类就是一个不完整的模板,我们不能够使用不完整的模板去构造对象。定义一个抽象类需要abstract关键字。

abstract class Building{
    public abstract decimal CalculateHeatingCost();
}

有几点需要注意的是

  • 当我们继承了一个抽象类的时候,我们必须去实现抽象类里的抽象方法。
  • 因为抽象的方法没有函数体,所有一般情况下每个子类的方法都是不同的。
  • 在声明和构造对象的时候,抽象类可以声明对象,但是不能用于构造对象。

一个抽象类的继承实例

abstract class Bird
    {
        private float speed;

        public void Eat()
        {

        }

        public abstract void Fly();
    }

class Crow:Bird
    {
        public override void Fly()
        {
            Console.WriteLine("乌鸦在飞行");
        }
    }

密封方法

在C#中,允许把类和方法声明为sealed。对于类来说,这表示不能够继承该类;对于方法来说,表示不能重写该方法。
语法规则

sealed FinalClass{
    //etc.
}

密封类和密封方法的作用:防止重写某些类导致代码混乱;商业原因。

//sealed class BaseClass
    class BaseClass
    {
        public virtual void Move()
        {

        }
    }

class DerivedClass:BaseClass //密封类无法被继承
    {
        public sealed override void Move() //只能密封重写的方法
        {

        }
    }

这段代码中可以看出,sealed关键字可以加在类名前面,但是在方法上只能加在重写方法前面,而且密封类是无法被继承的 。密封类在我们写程序的过程中几乎用不到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值