C#:抽象类PK密封类

来源:互联网 发布:python编写计算器程序 编辑:程序博客网 时间:2024/04/29 16:01

  最近在看关于C#的书,看到了抽象类和抽象方法,另外还看到了密封类和密封方法,那么二者有什么联系又有什么区别,我把最近的收获分享给大家!


1、抽象类和抽象方法:

    ·C#使用abstract关键字,将类或方法声明为抽象类和抽象方法

    ·抽象类不能被实例化,抽象方法必须在派生类中重写

    ·类中包含抽象方法,该类必须声明为抽象的,否则会报错

    

     public abstract class Class1     {        //变量定义不能添加abstract        private int i = 0;        //抽象方法        public abstract int count();        //一般方法        public string GetName(String name)        {            return name;        }     }


2、密封类和密封方法

    密封类:是类的一种,用sealed修饰,不能用作基类,也不能是抽象类。密封类主要用于防止派生。

   ·C#中使用sealed修饰,将类和方法声明为密封类或方法

   ·密封类不能被继承,密封方法不能被重写

   ·密封类不能作为基类,可以继承别的类或接口

   ·密封类不可继承,因此密封类不能声明为抽象的,否则会报错(如下图)

        public abstract sealed class Class2        {        }

       上图代码会报错:

        

      密封类的声明: 

     //声明密封类     public  sealed class Class2     {        public int i=0;        public void method()        {            Console.WriteLine("密封类");        }     }


   ·并不是所有的类都可以声明为密封类,密封类只能对基类的虚方法进行实现,一般与override一起使用

   

   namespace ClassLibrary1   {    //基类    public class myclass1    {        public virtual void method()        {            Console.WriteLine("基类的虚方法");        }    }   //密封类实现基类myclass1     public  sealed class myclass2:myclass1    {               public sealed override void method()        {            Console.WriteLine("密封类中重写的方法");        }    }  }


总结:

    通过对密封类和抽象类的比较,发现了许多新的东西,之前只是在写代码,遇到错误就直接修改但并没有想太多,接下来不能再这么做了,必须在敲代码的同时也能多问几个问什么?


  

   

0 0