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

news2025/1/17 23:25:25

目录

一、涉及到的知识点

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.coloradmin.cn/o/1447708.html

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

相关文章

键盘重映射禁用 CtrlAltDel 键的利弊

目录 前言 一、Scancode Map 的规范 二、禁用 CtrlAltDel 的方法及其缺陷 三、编程实现和测试 3.1 C 实现的简易修改工具 3.2 C# 实现的窗口工具 四、总结 本文属于原创文章&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_59075481/article/details…

如何才能学好JVM?——零基础入门篇

1. JVM是什么&#xff1f; JVM是Java Virtual Machine的简称&#xff0c;它是一个虚拟的计算机&#xff0c;专门为执行Java程序而设计。 你可以想象它是一个能够运行Java字节码的平台&#xff0c;无论你的程序在Windows、Mac还是Linux上&#xff0c;它们都能通过JVM在这些系统…

单调队列优化DP问题

目录 1.滑动窗口 2.最大子序和 3.旅行问题 4.烽火传递 5.绿色通道 6.修剪草坪 7.理想的正方形 1.滑动窗口 154.给定一个大小为 n≤106 的数组。 有一个大小为 k 的滑动窗口&#xff0c;它从数组的最左边移动到最右边。 你只能在窗口中看到 k 个数字。 每次滑动窗口向…

RBF神经网络中的RBF的英文全称是什么,是用来干什么的?

问题描述&#xff1a;RBF神经网络中的RBF的英文全称是什么&#xff0c;是用来干什么的&#xff1f; 问题解答&#xff1a; RBF神经网络中的RBF是径向基函数&#xff08;Radial Basis Function&#xff09;的缩写。径向基函数是一种在机器学习和模式识别中常用的函数类型&…

Peter算法小课堂—区间模型

Peter Pan来啦…… 最大不重叠区间数 二话不说&#xff0c;先来一道题 大家想想怎么贪心&#xff1f;我们可以将每一个美食摊位抽象成一个区间&#xff0c;区间左端点为开始排队时间&#xff0c;右端点为结束排队时间。其中&#xff0c;时间信息可以用数轴表示。 额……我们…

【Spring MVC篇】Cookie和Session的获取 Header的获取

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; Cookie是客户端保存用…

【知识整理】产研中心岗位评定标准之测试岗位

为贯彻执行集团数字化转型的需要,该知识库将公示集团组织内各产研团队不同角色成员的职务“职级”岗位的评定标准; 一、定级定档目的 通过对公司现有岗位及相应岗位员工的工作能力、工作水平进行客观公正评定,确定各岗位的等级及同等级岗位员工对应的档级,从而为员工以后的晋升…

M3芯片支持追光效果吗?苹果电脑上值得玩的游戏大作有什么? Mac电脑热门游戏推荐 苹果电脑玩幻兽帕鲁 crossover软件安装

M3是苹果最新发布的芯片&#xff0c;它采用了业界领先的3纳米工艺&#xff0c;能够提供更快的速度和更高的能效。苹果电脑是一种高端的个人电脑&#xff0c;它也有着不少优秀的游戏大作&#xff0c;能够给玩家带来不同的游戏体验。那么&#xff0c;M3支持追光效果吗&#xff1f…

【AutoML】AutoKeras 进行 RNN 循环神经网络训练

由于最近这些天都在人工审查之前的哪些问答数据&#xff0c;所以迟迟都没有更新 AutoKeras 的训练结果。现在那部分数据都已经整理好了&#xff0c;20w 的数据最后能够使用的高质量数据只剩下 2k。这 2k 的数据已经经过数据校验并且对部分问题的提问方式和答案内容进行了不改变…

前端秘法引言(配置vscode, 以及html的基础)

目录 一.配置环境vscode 二.配置插件 三.vscode的实用小技巧 四.标题段落换行标签 五.格式化标签 一.配置环境vscode vscode官网https://code.visualstudio.com/ 点击右上角的download 根据不同的操作系统进行下载安装,我这里选的是Windows x64 安装好后打开,点击左上角的…

React官网摘抄

https://react.dev/learn 1、组件名称大写 2、变量&#xff0c;用{} vue中用{{}} react中用{}3、遍历 4、state使用

Python算法题集_LRU 缓存

Python算法题集_LRU 缓存 题146&#xff1a;LRU 缓存1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【队列字典】2) 改进版一【有序字典】3) 改进版二【双向链表字典】 4. 最优算法 本文为Python算法题集之一的代码示例 题146&#xff1a;LRU …

基于AI Agent探讨:安全领域下的AI应用范式

先说观点&#xff1a;关于AI应用&#xff0c;通常都会聊准召。但在安全等模糊标准的场景下&#xff0c;事实上不存在准召的定义。因此&#xff0c;AI的目标应该是尽可能的“像人”。而想要评价有多“像人”&#xff0c;就先需要将人的工作数字化。而AI Agent是能够将数字化、自…

C++ //练习 6.27 编写一个函数,它的参数是initializer_list<int>类型的对象,函数的功能是计算列表中所有元素的和。

C Primer&#xff08;第5版&#xff09; 练习 6.27 练习 6.27 编写一个函数&#xff0c;它的参数是initializer_list类型的对象&#xff0c;函数的功能是计算列表中所有元素的和。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块…

现代化端口扫描工具RustScan

今天是大年初五&#xff0c;喜迎财神 &#xff0c;祝大家✔️顺风顺水 ✔️诸事如意 ✔️财源滚滚 ✔️大吉大利 顺便提一下&#xff0c;老苏的博客启用了新域名&#xff1a; https://laosu.tech 什么是 RustScan &#xff1f; RustScan 是一款现代化的端口扫描器。能快速找到端…

学生成绩管理系统|基于Springboot的学生成绩管理系统设计与实现(源码+数据库+文档)

学生成绩管理系统目录 目录 基于Springboot的学生成绩管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能模块 2、学生功能模块 3、教师功能模块 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源…

选台灯的正确指标?分享考公必备的护眼台灯

台灯作为家居类不可或缺的一种照明灯具&#xff0c;在我们的日常生活中发挥着重要作用&#xff0c;不管是学生党学习阅读&#xff0c;还是办公族加班工作等等&#xff0c;都离不开它的存在。不过台灯也是有着优劣之分的&#xff0c;如果使用了一款质量不好的台灯&#xff0c;时…

CTFshow web(php命令执行59-67)

web59 <?php /* # -*- coding: utf-8 -*- # Author: Lazzaro # Date: 2020-09-05 20:49:30 # Last Modified by: h1xa # Last Modified time: 2020-09-07 22:02:47 # email: h1xactfer.com # link: https://ctfer.com */ // 你们在炫技吗&#xff1f; if(isset($_POST…

AutoGen实战应用(三):多代理协作的数据可视化

之前我完成了关于AutoGen的两篇博客&#xff0c;还没有读过这两篇博客的朋友可以先阅读以下&#xff0c;这样有助于对AutoGen的初步了解&#xff1a; AutoGen实战应用(一)&#xff1a;代码生成、执行和调试_autogen 支持的model-CSDN博客 AutoGen实战应用(二)&#xff1a;多代…

Imgui(1) | 基于imgui-SFML改进自由落体小球

Imgui(1) | 基于imgui-SFML改进自由落体小球 0. 简介 使用 SFML 做2D图形渲染的同时&#xff0c;还想添加一个按钮之类的 GUI Widget, 需要用 Dear Imgui。由于 Imgui 对于2D图形渲染并没有提供类似 SFML 的 API, 结合它们两个使用是一个比较好的方法, 找到了 imgui-SFML 这个…