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("密封类中重写的方法");
}
}
}
总结:
通过对密封类和抽象类的比较,发现了许多新的东西,之前只是在写代码,遇到错误就直接修改但并没有想太多,接下来不能再这么做了,必须在敲代码的同时也能多问几个问什么?
C#:抽象类PK密封类的更多相关文章
- 【C# 基础概念】抽象类、密封类及类成员
使用 abstract 关键字可以创建不完整且必须在派生类中实现的类和 class 成员. 使用 sealed 关键字可以防止继承以前标记为 virtual 的类或某些类成员. abstract修饰符 ...
- 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”
前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用. F#是支持面向对象的函数式编程语言,所以你用 ...
- abstract virtaul override new 及多态
abstract abstract 修饰符可以和类.方法.属性.索引器及事件一起使用.在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类.标记为抽象或包含在抽象类中的成员必须通过从 ...
- 第九章 管理类型(In .net4.5) 之 继承机制
1. 概述 本章包括 设计和实现接口.创建和使用基类 以及 使用.net类库提供的标准接口. 2. 主要内容 2.1 设计和实现接口 一个接口包含公共的方法.属性.事件.索引器.类和结构都可以实现接口 ...
- Unity3D 相关项目代码
一.Application.PresistentDataPath 注意最后面是没有/的 public static string PresistentDataPathForEditor = " ...
- C# 语言规范_版本5.0 (第10章 类)
1. 类 类是一种数据结构,它可以包含数据成员(常量和字段).函数成员(方法.属性.事件.索引器.运算符.实例构造函数.静态构造函数和析构函数)以及嵌套类型.类类型支持继承,继承是一种机制,它使派生类 ...
- .Net Web开发技术栈
有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...
- C#基础知识之静态和非静态
项目中静态和非静态常被用到,什么时候需要用静态的,什么时候需要使用非静态,以及他们的区别是什么? 一.概述 静态和非静态的不同地方,就是静态从程序一启动就会一直占用内存,而非静态只有在实例化的时候才会 ...
- 【C# 复习总结】类、继承和接口
1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指 ...
随机推荐
- Mac OS备份迁移iBooks图书操作方法
前段时间换电脑,需要把原本电脑上的一些文件备份.迁移出来,包括iBooks中的电子书. 理论上,苹果体系中通过icloud账号可以把通讯录.备忘录等东西同步过去,但查了一下发现图书支持有限,而且我的e ...
- linux中的文件权限chmod
linux中的文件权限chmod 还是GPU集群那点事儿,集群之间磁盘互相挂载,普通用户也可以操作/cu02_nfs./cu04_nfs文件夹,这就牵扯到权限的问题,去google发现所谓的777 ...
- LeetCode 22. 括号生成(Generate Parentheses)
22. 括号生成 22. Generate Parentheses 题目描述 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结 ...
- lambda表达式已经成为了开发者必须要掌握的技能?
lambda表达式 lambda表达式是什么 引用百度百科 “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的la ...
- [转帖]GNU, Free Software and Open Source 自由软件与开源软件
GNU, Free Software and Open Source 自由软件与开源软件 https://blog.csdn.net/icycolawater/article/details/7792 ...
- github中的各种操作
1.上传文件到github 如图,你现在有三个项目在一个文件夹中,我们要把它上传到自己的github仓库中,该怎么做呢? 1.首先右击空白处,点击Git Bash Here,出现命令行 2. git ...
- 16 IO流(十三)——Object流 序列化与反序列化
Object流.序列化与反序列化 Object流是将 可序列化的对象 进行序列化与反序列化的流. 可序列化的对象:使用关键字Serializable修饰,表示这个对象可以进行序列化与反序列化. 序列化 ...
- 深度探索MySQL主从复制原理
深度探索MySQL主从复制原理 一 .概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什么? 1.1 MySQL 主从复制概念 MySQ ...
- CF1097G Vladislav and a Great Legend 组合、树形背包
传送门 看到\(k\)次幂求和先用斯特林数拆幂:\(x^k = \sum\limits_{i=1}^k \binom{x}{i}\left\{ \begin{array}{cccc} k \\ i \ ...
- JS获取时间差
Date.parse(String string)转为毫秒数进行比较