C#中密封类和密封方法

目录

一、定义与特性

1.何时使用密封类

2.定义

3.特性

二、示例


        如果所有的类都可以被继承,很容易导致类的层次结构变得十分复杂。使对类的理解和使用变得十分困难。为了避免滥用继承,C#中提出了密封类的概念。

一、定义与特性

        密封类可以用来限制扩展性,如果密封了某个类,则其他类不能从该类继承;如果密封了某个成员,则派生类不能重写该成员的实现。默认情况下,不应密封类型和成员。

1.何时使用密封类

C#中使用密封类时,如果类满足如下条件,则应将其密封:
☑ 类包含带有安全敏感信息的继承的受保护成员。
☑ 类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类。
☑ 类是一个要求使用反射进行快速搜索的属性。密封属性可提高反射在检索属性时的性能。

2.定义

C#中声明密封类时需要使用sealed关键字,具体语法格式如下:
访问修饰符 sealed class 类名:基类或接口
{//类成员
}

3.特性

  • 密封类不能作为基类被继承,但它可以继承别的类或接口。
  • 在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能在派生类中重写。
  • 由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abstract修饰符同时使用
  • 并不是每个方法都可以声明为密封方法,密封方法只能用于对基类的虚方法进行实现,并提供具体的实现。所以,声明密封方法时,sealed修饰符总是和override修饰符同时使用
  • 密封类除了不能被继承外,与非密封类的用法大致相同,只能通过实例化密封类的对象来访问,而不能被继承。而密封方法则必须通过重写基类中的虚方法来实现。

二、示例

        声明一个密封类myClass2,继承自myClass1类,在myClass2密封类中声明两个公共属性,分别用来表示用户编号和名称,然后密封并重写myClass1基类中的虚方法ShowInfo(),并提供具体的实现。最后在主程序类ProgramMain()方法中实例化MyClass2密封类的一个对象,然后使用该对 象访问myClass2密封类中的公共属性和密封方法。

// 密封类和密封方法
namespace _05
{public class MyClass1{public virtual void Showlnfo()          //虚方法,用来显示信息{}}public sealed class MyClass2 : MyClass1     //密封类,继承自myClass1{private string id = "";                 //string类型变量,用来记录编号private string name = "";               //string类型变量,用来记录名称public string ID                        //编号属性{get{return id;}set{id = value;}}public string Name                      // 名称属性{get{return name;}set{name = value;}}public sealed override void Showlnfo()  //密封并重写基类中的Showlnfo()方法{Console.WriteLine(ID + "" + Name);}}class Program{static void Main(string[] args){MyClass2 myclass2 = new()           //实例化密封类对象{ID = "BH0001",                  //为密封类中的编号属性赋值Name = "TM"                     //为密封类中的名称属性赋值};myclass2.Showlnfo();                //调用密封类中的密封方法}}
}
//运行结果:BH0001TM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法---腐烂的橘子

题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格…

isEmpty() 和 null的区别

概念 null:是对象为空(IsNull);isEmpty():是值为空(IsEmpty) 具体 null指任务类型变量以及对象类型的变量是否为空。IsEmpty函数:用于判断一个变量是否已初始化,如果变…

QML SplitView

SplitView 是什么主要属性orientationhandlevisibleAreachildren简单示例interactiveminimumWidth/minimumHeight 和 maximumWidth/maximumHeightonClicked 和 onDoubleClicked示例 属性和技巧Layout AdjustmentsStyling and AppearanceIntegrating with Other ComponentsProp…

STM32在进行CAN总线多节点通信时,同时发数据会一直收不到某设备数据的问题及解决

CAN多设备通信收不到某设备数据的问题及解决 遇到的问题问题的发现CAN总线的一般冲突机制STM32中的CAN冲突机制 遇到的问题 问题的发现 最近在开发Canopen项目中,进行一主多从设备通信时,主站发送同步帧,两个从站往往只有帧ID优先级高的设备…

【C++进阶之路】第四篇:set和map

文章目录 一、关联式容器健值对二、set & multiset三、map & multimap在这里插入图片描述 四、set和map底层原理 一、关联式容器健值对 关联式容器 & 键值对 二、set & multiset set & multiset 三、map & multimap map & multimap 四、set和…

数据分析软件工具有哪些

数据分析是当下企业必不可少的工具之一,数据资产是企业的重中之重,如何在各类数据当中提取重要信息,从而辅助企业做出智慧决策是企业的核心。下面,数聚就从常见的工具当中为企业做出介绍,方便企业寻找到适合自己的工具…

SocketIo的使用和基于SocketIO的聊天室

Socket.IO 是一个库,可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信。 一、Socket.IO的特点 以下是 Socket.IO 在普通 WebSockets 上提供的功能: 1、HTTP 长轮询回退 如果无法建立 WebSocket 连接,连接将回退到 HTTP 长轮…

Cesium 加载geojson数据类型点线面

1.获取geojson数据,本地新建一个.ts文件放置数据导出,并引入 获取geojson数据: DataV.GeoAtlas地理小工具系列 import { scGeojson } from ./geojson; 2.加载面 const addPolygonEvt () > {viewer.dataSources.add(Cesium.GeoJsonDataSo…

【计算机网络学习之路】Windows下的socket编程

文章目录 前言Windows下的socket编程1.预备工作2. socket编程 结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本篇文章仅记录Windows下socket编程和Linux的不同,并没…

将docker镜像打包成tar.gz包

docker save -o web10.tar localhost:8000:1.0 生成web10.tar gzip web10.tar 生成web10.tar.gz

Vue3的响应式更新是由什么实现的

目录 而Vue3则利用了Proxy的强大特性来实现了响应式更新。 以上代码中,我们定义了一个原始的data对象,并将其使用Proxy进行了代理。在代理对象proxy中,我们定义了get和set两个方法,当我们读取或设置响应式数据的值时&#xff0c…

云ES容灾方案

一、ES集群可用性容灾 1.1 云ES集群可用性容灾(使用跨可用区实例) 云ES集群部署在三个可用区,单可用区故障,云ES集群依然可能对外提供服务;两个可用区故障,需要进行控制台切流(集群会自动切的选择主节点) 应用服务部署在二个可用区,单可用区故障,依然可对提供服务1.2 …

开源网安解决方案荣获四川数实融合创新实践优秀案例

​11月16日,2023天府数字经济峰会在成都圆满举行。本次峰会由四川省发展和改革委员会、中共四川省委网络安全和信息化委员会办公室、四川省经济和信息化厅等部门联合指导,聚焦数字经济与实体经济深度融合、数字赋能经济社会转型发展等话题展开交流研讨。…

vue2【相关介绍】

目录 1:什么是单页面应用程序 2:什么是vue-cli 3:安装使用 4:vue项目的目录结构:​编辑 5:了解src目录的构成: 6:vue项目的运行流程 7:el:容器名称&…

python paramiko模块

示例 import paramikossh paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加主机名及主机密钥到本地 HostKeys 对象,默认是拒绝未知的 ssh 服务器连接 ssh.connect(node, usernameyour_username, passwordyour_passwo…

ChatGPT暂时停止开通plus,可能迎来封号高峰期

前言: 前两日,chat gpt的创始人 San Altman在网上发表了,由于注册的使用量超过了他们的承受能力,为了确保每个人的良好使用体验,chat gpt将暂时停止开通gpt plus。 情况: 前段时间好像出现了官网崩溃的情况,就连api key都受到了影响,所以现在就开始了暂时停止plus的注…

leetcode做题笔记2216. 美化数组的最少删除数

给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则认为数组 nums 是一个 美丽数组 : nums.length 为偶数对所有满足 i % 2 0 的下标 i ,nums[i] ! nums[i 1] 均成立 注意,空数组同样认为是美丽数组。 你…

本机idea连接虚拟机中的Hbase

相关环境: 虚拟机:Centos7 hadoop版本:3.1.3 hbase版本:2.4.11 zookeeper版本:3.5.7 Java IDE:IDEA JDK:8 步骤 步骤一:在idea创建一个maven项目 步骤二:在虚拟机里找到core-site.x…

Epoll:让IO多路复用变得有趣

Epoll 是 Linux 系统中高性能的 I/O 事件通知机制,通过它可以实现对大量文件描述符的高效监控,适用于构建高并发的网络服务器。 文章目录 epoll介绍主要特点epoll与poll、select区别效率和扩展性文件描述符数量限制工作模式小结 epoll常用函数epoll_crea…

苹果ipa内侧分发可以通过哪些方法

苹果ipa内侧分发可以通过使用苹果企业签名、云服务分发平台、TestFlight分发等方式实现。 对于企业签名,它适合用于公司内部员工使用的应用,或者需要快速安装和使用的应用。开发者可以在苹果开发者中心生成企业级证书,然后将应用打包成IPA文…