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

总结:

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

C#:抽象类PK密封类的更多相关文章

  1. 【C# 基础概念】抽象类、密封类及类成员

    使用 abstract 关键字可以创建不完整且必须在派生类中实现的类和 class 成员. 使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员. abstract修饰符 ...

  2. 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”

    前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...

  3. abstract virtaul override new 及多态

    abstract abstract 修饰符可以和类.方法.属性.索引器及事件一起使用.在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类.标记为抽象或包含在抽象类中的成员必须通过从 ...

  4. 第九章 管理类型(In .net4.5) 之 继承机制

    1. 概述 本章包括 设计和实现接口.创建和使用基类 以及 使用.net类库提供的标准接口. 2. 主要内容 2.1 设计和实现接口 一个接口包含公共的方法.属性.事件.索引器.类和结构都可以实现接口 ...

  5. Unity3D 相关项目代码

    一.Application.PresistentDataPath 注意最后面是没有/的 public static string PresistentDataPathForEditor = " ...

  6. C# 语言规范_版本5.0 (第10章 类)

    1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类 ...

  7. .Net Web开发技术栈

    有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...

  8. C#基础知识之静态和非静态

    项目中静态和非静态常被用到,什么时候需要用静态的,什么时候需要使用非静态,以及他们的区别是什么? 一.概述 静态和非静态的不同地方,就是静态从程序一启动就会一直占用内存,而非静态只有在实例化的时候才会 ...

  9. 【C# 复习总结】类、继承和接口

    1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指 ...

随机推荐

  1. 用Postman做接口测试

    The higher your test coverage, the more flexible and bug-resistant your code will be, and the less t ...

  2. 使用nohup命令编写shell脚本启动java应用,并使用外挂配置文件

    nohup nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应的进程. 在缺省情况下该作业的所 ...

  3. Spring笔记3

    动态代理** 特点:字节码随用随创建,随用随加载 作用:不修改源码的基础上对方法增强 分类: ​ 基于接口的动态代理 ​ 基于子类的动态代理 基于接口的动态代理: 涉及的类:Proxy 如何创建代理对 ...

  4. Spark源码(1) Spark配置

    写熟悉的第一句代码 val conf = new SparkConf().setAppName("WordCount")点击SparkConf() ,发现 private val ...

  5. Java开发笔记(一百一十)GET方式的HTTP调用

    所谓术业有专攻,一个程序单靠自身难以吃成大胖子,要想让程序变得血肉丰满,势必令其与外界多加交流,汲取天地之精华,方能练就盖世功夫.那么程序应当如何与外部网络进行通信呢?计算机网络的通信标准主要采取TC ...

  6. Java开发笔记(一百二十七)Swing的标签

    提起AWT的标签控件Label,那个使用体验可真叫糟糕,不但不支持文字换行,而且对中文很不友好,既可能把中文显示为乱码,还不支持博大精深的各种中文字体.所幸Swing的升级版标签JLabel在各方面都 ...

  7. 函数的练习1——python编程从入门到实践

    8-1 消息: 编写一个名为display_message()的函数,它打印一个句子指出你在本章学的是什么.调用这个函数,确认显示的消息正确无误. def display_message(): pri ...

  8. python 之 Django框架(APP和ORM的使用)

    12.3 APP 12.31 创建APP 一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码 用命令行创建一个APP: python3 manage.py startapp app0 ...

  9. 继承 多态 封装 Python面向对象的三大特性

    1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析.  那这个也可以被称为封装. 2. 继承: 两个 ...

  10. flink linux安装 单机版

    1.下载二进制的Flink,根据你喜欢的Hadoop/Scala版本选择对应的Flink版本. https://flink.apache.org/downloads.html2.选择存放目录 解压 f ...