zoukankan      html  css  js  c++  java
  • C#:抽象类PK密封类

      最近在看关于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("密封类中重写的方法");
            }
        }
      }


    总结:

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


      

       

  • 相关阅读:
    学生3D作品---李自立---熊猫(Blender 2.8)
    学生3D作品---李自立---台式电脑加椅子(Blender 2.8)
    Tweak Kernel’s Task Scheduler to Boost Performance on Android [Part 2]
    Tweak Kernel’s Task Scheduler to Boost Performance on Android [Part 1]
    Binder transactions in the bowels of the Linux Kernel
    操作系统原理——实验——作业命名格式
    Linux 引入自动化测试平台 KernelCI
    进程可创建的最大连接数
    Docker—PaaS—微服务
    3D学院人才培养的金字塔模型-张同光-20190924---发言稿
  • 原文地址:https://www.cnblogs.com/zsswpb/p/6329461.html
Copyright © 2011-2022 走看看