C#使用密封类密封用户信息

目录

一、涉及到的知识点

1.密封类定义

2.何时使用密封类

3.使用密封类的注意事项

二、实例1

三、实例2

1.源码

2.生成效果


        在C#中,密封类(sealed class)是一种不能被其他类继承的类。它用于防止其他类继承它的功能和属性。 

一、涉及到的知识点

1.密封类定义

        密封类的突出特点是不能被继承,通过密封类封装用户信息可以增加用户信息的安全性。使用密封类密封用户的登录用户名和密码,以保证其安全性。

        密封类可以用来限制扩展性,如果密封了某个类,则其他类不能从该类继承;如果密封了某个成员,则派生类不能重写该成员的实现。默认情况下,不应该密封类型和成员。密封可以防止对库的类型和成员进行自定义,但也会影响某些开发人员对可用性的认识。

        在C#中声明密封类时需要使用sealed关键字,具体语法格式如下:

访问修饰符sealed class类名:基类或接口
{//类成员
}

2.何时使用密封类

         C#中使用密封类时,如果类满足如下条件,则应将其密封:

  • 类是静态类。
  • 类包含带有安全敏感信息的继承的受保护成员。
  • 类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类。
  • 类是一个要求使用反射进行快速搜索的属性,密封属性可提高反射在检索属性时的性能。

3.使用密封类的注意事项

  •  密封类不能作为基类被继承,但它可以继承别的类或接口。
  • 在密封类中不能声明受保护成员或虚成员,因为受保护成员只能从派生类进行访问,而虚成员只能在派生类中重写。
  • 由于密封类的不可继承性,因此密封类不能声明为抽象的。

二、实例1

// 密封类
namespace _118_1
{sealed class SealedClass{public static void GetMessage(){Console.WriteLine("这是一个密封类。");}}class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);SealedClass.GetMessage();// 尝试创建一个继承自密封类的类// 这将导致编译错误,因为密封类不能被继承// class SealedChildClass : SealedClass// {//     public void ChildMethod()//     {//         Console.WriteLine("这是密封类的子类。");//     }// }Console.ReadKey();}}
}
//运行结果:
/*
这是一个密封类。*/

三、实例2

        使用密封类密封用户的登录用户名和密码,以保证其安全性。

1.源码

// 使用密封类密封用户信息
namespace _118
{public partial class Form1 : Form{private GroupBox? groupBox1;private Button? button2;private Button? button1;private TextBox? textBox2;private TextBox? textBox1;private Label? label2;private Label? label1;public Form1(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // label1// label1 = new Label{AutoSize = true,Location = new Point(64, 37),Name = "label1",Size = new Size(56, 17),TabIndex = 0,Text = "用户名:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(64, 69),Name = "label2",Size = new Size(56, 17),TabIndex = 1,Text = "密   码:"};// // textBox1// textBox1 = new TextBox{Location = new Point(129, 31),Name = "textBox1",Size = new Size(100, 23),TabIndex = 2};// // textBox2// textBox2 = new TextBox{Location = new Point(129, 66),Name = "textBox2",Size = new Size(100, 23),TabIndex = 3};// // button1// button1 = new Button{Location = new Point(64, 101),Name = "button1",Size = new Size(75, 23),TabIndex = 4,Text = "确定",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // button2// button2 = new Button{Location = new Point(154, 101),Name = "button2",Size = new Size(75, 23),TabIndex = 5,Text = "取消",UseVisualStyleBackColor = true};button2.Click += Button2_Click;// // groupBox1// groupBox1 = new GroupBox{Location = new Point(12, 12),Name = "groupBox1",Size = new Size(300, 152),TabIndex = 0,TabStop = false,Text = "登录窗口"};groupBox1.Controls.Add(button2);groupBox1.Controls.Add(button1);groupBox1.Controls.Add(textBox2);groupBox1.Controls.Add(textBox1);groupBox1.Controls.Add(label2);groupBox1.Controls.Add(label1);groupBox1.SuspendLayout();// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(324, 176);Controls.Add(groupBox1);Name = "Form1";Text = "使用密封类密封用户信息";groupBox1.ResumeLayout(false);groupBox1.PerformLayout();}/// <summary>/// 按钮事件:登录/// 调用密封类/// </summary>private void Button1_Click(object? sender, EventArgs e){if (textBox1!.Text == "" || textBox2!.Text == ""){MessageBox.Show("用户名和密码不能为空", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);}else{MyClass myclass = new(){Name = textBox1.Text,            //为密封类中的编号属性赋值Pwd = textBox2.Text              //为密封类中的名称属性赋值};	                                 //实例化密封类对象MessageBox.Show("登录成功,用户名:" + myclass.Name + " 密码:" + myclass.Pwd, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}}/// <summary>/// 退出当前应用程序/// </summary>private void Button2_Click(object? sender, EventArgs e){Application.Exit();}/// <summary>/// 通过sealed关键字声明密封类,防止类被继承,有效保护重要信息/// </summary>public sealed class MyClass{private string name = "";   //string类型变量,用来记录用户名private string pwd = "";    //string类型变量,用来记录密码/// <summary>/// 用户名,属性/// </summary>public string Name{get{return name;}set{name = value;}}/// <summary>/// 密码,属性/// </summary>public string Pwd{get{return pwd;}set{pwd = value;}}}}
}

2.生成效果

 

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

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

相关文章

深度解析 Netty 架构与原理

一共 28661字&#xff0c;耐心看完。 在阅读本文前最好有 Java 的 IO 编程经验&#xff08;知道 Java 的各种 IO 流&#xff09;&#xff0c;以及 Java 网络编程经验&#xff08;用 ServerSocket 和 Socket 写过 demo&#xff09;&#xff0c;并对 Java NIO 有基本的认识&…

linux---内存管理

一 虚拟内存 即使是现代操作系统中&#xff0c;内存依然是计算机中很宝贵的资源&#xff0c;看看你电脑几个T固态硬盘&#xff0c;再看看内存大小就知道了。 为了充分利用和管理系统内存资源&#xff0c;Linux采用虚拟内存管理技术&#xff0c;利用虚拟内存技术让每个进程都有…

计算机网络——09Web-and-HTTP

Web and HTTP 一些术语 Web页&#xff1a;由一些对象组成对象可以是HTML文件、JPEG图像&#xff0c;JAVA小程序&#xff0c;声音剪辑文件等Web页含有一个基本的HTML文件&#xff0c;该基本HTML文件又包含若干对象的引用&#xff08;链接&#xff09;通过URL对每个对象进行引用…

权限提升:利用Linux错配提权

目录 Linux权限基础 Linux用户权限 Linux文件权限 特殊的Linux文件权限 Linux本机信息收集 Linux错配提权 crontab计划任务提权 SUID提权 Linux权限基础 Linux用户权限 在Linux中&#xff0c;根据权限的不同&#xff0c;大致可以分为三种&#xff1a;超级用户&#x…

npm install 安装依赖如何加速

在使用npm安装依赖时&#xff0c;有几种方法可以加速这一过程&#xff0c;尤其是在面临网络限制或npm官方源速度慢的情况下。以下是一些常用的加速技巧&#xff1a; 1. 使用国内镜像源 国内有几个镜像源可以提供更快的下载速度&#xff0c;例如淘宝npm镜像。你可以通过以下命…

通过QT制作一个模仿微信主界面的界面(不要求实现具体通信功能)

main.cpp #include "widget.h" #include "second.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();//实例化第二个界面Second s;QObject::connect(&w, &Widget::my_jump, &…

Linux线程库封装

一 MyThread.hpp #pragma once #include<pthread.h> #include<iostream> #include<unistd.h> #include<string> #include<ctime>typedef void (*callback_t)(); static int num 1; //任务和线程绑定 class Thread {static void* Routine(void …

力扣精选算法100道——矩阵区域和 (前缀和专题)

目录 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f388;实现代码 &#x1f388;了解题意 给定一个大小为 m x n 的矩阵 mat 和一个整数 k&#xff0c;你需要计算一个新的矩阵 answer&#xff0c;其中每个 answer[i][j] 表示矩阵 mat 中以坐标 (i, j) 为中心、边…

论文阅读-Pegasus:通过网络内一致性目录容忍分布式存储中的偏斜工作负载

论文名称&#xff1a;Pegasus: Tolerating Skewed Workloads in Distributed Storage with In-Network Coherence Directories 摘要 高性能分布式存储系统面临着由于偏斜和动态工作负载引起的负载不平衡的挑战。本文介绍了Pegasus&#xff0c;这是一个利用新一代可编程交换机…

CSS 评分器星星效果

<template><view class="rating"><!-- 5颗星 --><input value="5" name="rating" id="star5" type="radio"><label for="star5"></label><!-- 4颗星 --><input val…

【后端高频面试题--设计模式下篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--设计模式下篇 后端高频面试题--设计模式上篇设计模式总览模板方法模式怎么理解模…

探索机器学习:定义、算法及应用领域

目录 前言1 机器学习的定义2 机器学习算法2.1 监督学习2.2 无监督学习2.3 强化学习 3 机器学习的应用3.1 智能搜索3.2 医疗诊断3.3 无人驾驶 结语 前言 机器学习&#xff0c;源自Arthur Samuel的定义&#xff0c;赋予计算机通过领域学习的能力&#xff0c;使其在不需要明确程序…

【王道数据结构】【chapter5树与二叉树】【P158t10】

已知二叉树以二叉链表存储&#xff0c;编写算法完成&#xff1a;对于树种每个元素值为x的结点&#xff0c;删除以它为根的子树&#xff0c;并释放相应的空间 #include <iostream> #include <queue> typedef struct treenode{char data;struct treenode *left;struc…

2月7日作业

分别通过select、多进程、多线程实现一个并发服务器 #include <myhd.h> #define IP "192.168.250.100" #define PORT 8888 int deal_cli_msg(int newfd,struct sockaddr_in cin) {char buf[128] "";while(1){bzero(buf,sizeof(buf));int res recv…

使用Word Embedding+Keras进行自然语言处理NLP

目录 介绍&#xff1a; one-hot&#xff1a; pad_sequences: 建模: 介绍&#xff1a; Word Embedding是一种将单词表示为低维稠密向量的技术。它通过学习单词在文本中的上下文关系&#xff0c;将其映射到一个连续的向量空间中。在这个向量空间中&#xff0c;相似的单词在空间…

2024年智能算法优化PID参数,ITAE、ISE、ITSE、IAE四种适应度函数随意切换,附MATLAB代码...

PID 参数整定就是确定比例系数&#xff08;Kp &#xff09;、积分系数&#xff08;Ki&#xff09;和微分系数&#xff08;Kd &#xff09;的过程&#xff0c;以便使 PID 控制器能够在系统中实现稳定、快速、准确的响应。 本期的主题 采用四种2024年的智能优化算法优化PID的三个…

【开源】JAVA+Vue+SpringBoot实现毕业生追踪系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)

文章目录 6.1 CI/CD基础6.1.1 基础知识讲解6.1.2 重点案例&#xff1a;为 Python Web 应用实现 CI/CD6.1.3 拓展案例 1&#xff1a;自动化部署到云平台6.1.4 拓展案例 2&#xff1a;使用 Docker 容器化部署 6.2 Git 与自动化测试6.2.1 基础知识讲解6.2.2 重点案例&#xff1a;为…

numpy 查漏补缺

1. iterating 2. 3. 4. 5. 6. 7. 8. 9.

【HTML】情人节给npy一颗炫酷的爱心

闲谈 兄弟们&#xff0c;这不情人节快要到了&#xff0c;我该送女朋友什么&#x1f381;呢&#xff1f;哦&#xff0c;对了&#xff0c;差点忘了&#xff0c;我好像没有女朋友。不过这不影响我们要过这个节日&#xff0c;我们可以学习技术。举个简单的&#x1f330;&#xff1…