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. 使用sed修改配置项的值

    起先我的想法是根据等号来求得配置项所在的行号, sed -n '/aaa/=' config.ini 然后根据行号删除这一行,再增加一行比如行号是9 sed -i  '9d' config.ini s ...

  2. XSD详解三 - 复合元素+总结篇

    一.复合元素介绍 1.什么是复合元素? 复合元素指包含其他元素及/或属性的 XML 元素. 有四种类型的复合元素: 空元素 包含其他元素的元素 仅包含文本的元素 包含元素和文本的元素 注释:上述元素均 ...

  3. c++中对于json的key不带双引号的问题修复

    在引用了第三方数据时,数据源通过转义,将json的key上双引号给去掉了. 在PHP开发时,可以通过正则表达式替换方式来补充丢失的双引号,处理代码如下 function ex_json_decode( ...

  4. WPF ”真正的“高仿QQ

    时常可以在各种论坛 博客 看到 各种所谓的 高仿QQ. 说实话 越看越想笑呢.(PS:纯粹的 抨击 那些 不追求 UI 完美主义者) 例如:       本次模仿 采用 C# WPF XAML , 总 ...

  5. Python中append和extend的区别

    编者注:本文主要参考了<Python核心编程(第二版)> 网上有很多对这两个函数的区别讲解,但我觉得都讲的不是很清楚,记忆不深刻.这样解释清楚且容易记住. list.append(obje ...

  6. servlet上传与下载

    上传页面 上传学生信息 学号  姓名  密码  性别 男 女 年龄  身高  学院  计算机学院 软件学院 照片  简历 <!DOCTYPE html> <html lang=&qu ...

  7. NFS配置及使用

    什么是NFS NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享存储.在NFS的应用中,本地NFS ...

  8. Python:注释

    什么是注释? 注销:不参与执行 解释代码:有人习惯把代码解释放边上,建议放上边. 1)单行注释以 # 开头 # 需求12:键盘输入正整数n,求出n与其反序之和并输出例如:123反序321输出123+3 ...

  9. vuejs、eggjs全栈式开发设备管理系统

    vuejs.eggjs全栈式开发简单设备管理系统 业余时间用eggjs.vuejs开发了一个设备管理系统,通过mqtt协议上传设备数据至web端实时展现,包含设备参数分析.发送设备报警等模块.收获还是 ...

  10. [译]前端JS面试题汇总 Part 1(事件委托/this关键字/原型链/AMD与CommonJS/自执行函数)

    原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...