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. SpringMVC之Http标准的头部信息

  2. php环境搭建和第一个php程序

    一.开发环境搭建 因为是初学,使用的还是非常经典的组合appserv+dreamweaver cs6; 1.1   appserv安装 appserv的安装还是非常简单的,直接双击可执行程序appse ...

  3. 【翻译】CSS Animations VS the Web Animations API:案例学习

    原文地址:CSS Animations vs the Web Animations API: A Case Study May 03, 2017 css, javascript 上周我写了我如何使用C ...

  4. pygame写贪吃蛇

    python小白尝试写游戏.. 学了点pygame不知道那什么练手好,先拿贪吃蛇开刀吧. 一个游戏可以粗略的分为两个部分: 数据(变量) 处理数据(函数,方法) 设计变量 首先预想下,画面的那些部分需 ...

  5. sql sever基本语法总结

    一.数据库导入表 1.先用sql语句创建相应的表,包括表的字段和字段类型 2.导入数据,选择相应的表名,不带'$'符号的表名 二.创建数据库 create datatable 数据库名 三.查看表里的 ...

  6. [bzoj2286][Sdoi 2011]消耗战

    [bzoj2286]消耗战 标签: 虚树 DP 题目链接 题解 很容易找出\(O(mn)\)的做法. 只需要每次都dp一遍. 但是m和n是同阶的,所以这样肯定会T的. 注意到dp的时候有很多节点是不需 ...

  7. 微信小程序AES加密解密

    微信小程序  其实在调用一些第三方 js的时候 其实没有大家想的那么复杂,无非就是把原生js调用方式   改为微信小程序 js调用方式 废话不多说直接贴代码 其实就是将原生function 或者 对象 ...

  8. [翻译]【目录】编写高性能 .NET 代码

    本篇是 Writing High-Performance .NET Code 的目录索引,翻译内容不定时更新,目录也会同步修改. 性能测量及工具 选择什么来衡量 平均数vs百分比 工具介绍 Visua ...

  9. MysqL碎片整理优化

    先来说一下什么是碎片,怎么知道碎片有多大! 简单的说,删除数据必然会在数据文件中造成不连续的空白空间,而当插入数据时,这些空白空间则会被利用起来.于是造成了数据的存储位置不连续,以及物理存储顺序与理论 ...

  10. Linux CentOs集群LVS+Keepalived负载均衡的实现

    准备工作 环境:Win10下Centos6.4虚拟机. 负载均衡:两台(一主一备)  LVS + Keepalived. HTTP服务器:3台. 给每台服务器配置IP 1.VIP(virtual ip ...