1、密封类

1)不是所有的类都可以继承,不能别继承的类叫做密封类。如果一个类不希望被继承、被派生可以采用关键字sealed,下面Class2不能继承Class1

Class1.cs:

namespace 密封类和密封方法
{
//如果一个类不希望被继承、被派生可以采用关键字sealed
public sealed class Class1
{
}
}

Class2.cs

namespace 密封类和密封方法
{
class Class2:Class1//不可以继承,Class1有修饰符sealed
{
}
}

2)密封类中不能包含虚方法(virtual)和抽象方法(abstract),抽象方法和虚方法的存在就是要用来继承的,密封的类没有为派生类实现实现虚方法和抽象方法的机会。

3).NET类库大量使用密封类,使希望从这些类从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如string就是密封类

2、密封方法

1)密封方法:用修饰符sealed进行标记的方法

2)作用:使用sealed修饰可以防止派生类进一步重写该方法

3)如果实例方法声明包含sealed修饰符,则它必须包含override修饰符

4)不能重写密封方法,示例:(Class3不能重写Class2中的Write()方法)

Class3.cs:

class Class3:Class2
{
//public override sealed void Write() {
// Console.WriteLine("Write()这个方法能否被重写");
//}
//不能重写密封方法
}

Class2.cs:

public class Class2:Class1
{
public sealed override void Write()
{
Console.WriteLine("这是一个密封方法");
}
}

Class1.cs:

public class Class1 {
public virtual void Write() {
Console.WriteLine("这是一个未密封的方法");
}
}

5)源码笔记:

Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
//密封类中不能包含虚方法(virtual)和抽象方法(abstract),抽象方法和虚方法的存在就是要用来继承的,密封的类没有为派生类实现实现虚方法和抽象方法的机会
//.NET类库大量使用密封类,使希望从这些类从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如string就是密封类
//密封方法:用修饰符sealed进行标记的方法
//作用:使用sealed修饰可以防止派生类进一步重写该方法
//如果实例方法声明包含sealed修饰符,则它必须包含override修饰符
//不能重写密封方法
//public override sealed void Wite() {
// Console.WriteLine("Write()这个方法能否被重写");
//}

class Program
{
static void Main(string[] args)
{
Class2 myClass2 = new Class2();
myClass2.Write();

}
}
}

Class1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
//如果一个类不希望被继承、被派生可以采用关键字sealed
public class Class1 {
public virtual void Write() {
Console.WriteLine("这是一个未密封的方法");
}
}
}

Class2.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
public class Class2:Class1
{
public sealed override void Write()
{
Console.WriteLine("这是一个密封方法");
}
}
}

Class3.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 密封类和密封方法
{
//不是所有的类都可以被继承,不能被继承的类称为
//
class Class3:Class2
{
//public override sealed void Write() {
// Console.WriteLine("Write()这个方法能否被重写");
//}
//不能重写密封方法
}
}

C#密封类和密封方法--C#基础的更多相关文章

  1. (sealed)密封类及密封方法优缺点

    1. 密封类防止被继承 (有利于代码优化, 由于密封类的不被继承性, 代码在搜索此方法时可以直接定位, 不需要一层层的找继承关系) 只有本程序集可以使用 2. 密封类中不需要再写密封方法(一般密封方法 ...

  2. c# 第40节 密封类、密封方法

    本节内容: 1:密封的存在意义 2:密封方法的实现 1:密封的存在意义 2:密封方法的实现 class2::父类 class Class2 { public virtual void show() { ...

  3. 【JavaScript】数组方法之基础方法

    数组方法之基础方法 Array 对象属性 属性 描述 constructor 返回对创建此对象的数组函数的引用. length 设置或返回数组中元素的数目. prototype 使您有能力向对象添加属 ...

  4. WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

    在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟 ...

  5. 详解JAVA8Stream 方法引用(基础){全}

    1: Stream流 1.1 引言 1.2 流式思想概述 1.3 获取流 1.4 常用方法 1.5 练习:集合元素处理 2:方法引用 2.1 冗余的Lambda场景 2.2 方法引用符 2.3 通过对 ...

  6. Ruby Rails学习中:Ruby内置的辅助方法,基础内容回顾补充

    一. Ruby内置的辅助方法 1.打开文件:app/views/layouts/application.html.erb(演示应用的网站布局) 来咱把注意力放在圈起来的那一行: 这行代码使用 Rail ...

  7. List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇

    最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...

  8. Python中的sort()方法使用基础

    一.基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)itera ...

  9. 字符串:各种奇葩的内置方法 - 零基础入门学习Python014

    字符串:各种奇葩的内置方法 让编程改变世界 Change the world by program 字符串:各种奇葩的内置方法 或许现在又回过头来谈字符串,有些朋友可能会觉得没必要,也有些朋友会觉得不 ...

随机推荐

  1. Matplotlib学习笔记(一)

    原   matplotlib学习笔记 参考:Python数据科学入门教程 Python3.6.1 jupyter notebook .caret, .dropup > .btn > .ca ...

  2. HDU1013,1163 ,2035九余数定理 快速幂取模

    1.HDU1013求一个positive integer的digital root,即不停的求数位和,直到数位和为一位数即为数根. 一开始,以为integer嘛,指整型就行吧= =(too young ...

  3. 发送邮件的小功能(.net core 版)

    前言: 使用.net core 开发有一段时间了,期间从.net core 2.0 preview1 到 preview2 又到core 1.1 现在2.0正式版出来了.又把项目升级至2.0了.目前正 ...

  4. IOS教程视频汇总

    使用StoryBoard做iOS UI界面跳转

  5. 创建hbase-indexer出现 0 running

    新建hbase-indexer后通过hbase-indexer list-indexers发现SEP subscription ID: null并且0 running processes,如下: IN ...

  6. 哪些CSS是可以被继承的--简单整理

    那些CSS是可以被继承的--简单整理1.文本相关属性是继承的:font-size,font-family,line-height,text-index等2.列表相关属性是继承的:list-style- ...

  7. linux下双网卡的绑定

    如果服务器上有两快网卡就可以把它绑定为一块虚拟的网卡,如果一块网卡坏了另一块还可以继续工作,增加了冗余度和负载,具体做法如下: 新建一个虚拟的网卡,命令如下: iv /etc/sysconfig/ne ...

  8. levmar ndk 编译

         levmar是一个强大的和高效率的C/C++库,采用Levenberg - 马奎德(LM)优化算法, 主要是为了解决非线性最小二乘问题.官网是:http://users.ics.forth. ...

  9. (一)《Maven实战》读书笔记 —— Maven简介

    第一章:Maven简介 一.何为Maven? Maven这个词可以翻译为"知识的积累",本书将介绍Maven这一跨平台的项目管理工具.作为Apache组织中的一个个颇为成功的开源项 ...

  10. 利用fiddler和mock调试本地微信网页

    利用fiddler和mock调试本地微信网页 微信公众号网页是比较特殊的页面,普通页面直接打开即可访问,但对于需要请求微信相关接口的部分需要安全域名认证.这导致了使用mock数据进行开发的页面没办法走 ...