抽象类与密封方法

来源:互联网 发布:淘宝物流评分怎么提升 编辑:程序博客网 时间:2024/04/29 19:11

抽象类

在上一篇文章里,我们知道基类里的函数能够被重写,那么要是在一个程序里,他的函数在每个子类里全部都要被重写,该基类的函数可不可以不去实现,只定义一个函数呢?
我们可以定义一个抽象函数,抽象函数只有函数定义没有函数体,可以说抽象函数本身也是虚拟的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关键字可以加在类名前面,但是在方法上只能加在重写方法前面,而且密封类是无法被继承的 。密封类在我们写程序的过程中几乎用不到。

原创粉丝点击