C# set的一些使用方法

在C#应用中,使用set监控值的改变触发事件是一种非常常见的编程模式。

比如下面一些应用。

1、属性更改通知:当某个属性的值发生变化时,可以使用set监控属性的改变,并触发一个事件来通知其他部分代码。这在MVVM(Model-View-ViewModel)模式中非常常见,用于在属性更改时更新用户界面。

例如,假设有一个名为Person的类,其中有一个属性Name。可以定义一个事件PropertyChanged,并在Name属性的set方法中触发该事件。这样,在Name属性发生变化时,可以通知其他部分代码进行相应的操作,比如更新用户界面。

public class Person
{private string _name;public string Name{get { return _name; }set{if (_name != value){_name = value;OnPropertyChanged(nameof(Name));//MyEvent(value);}}}//定义一个委托//public delegate void ValueChanged(string message)//定义一个事件//public event ValueChanged MyEvent;public event EventHandler<PropertyChangedEventArgs> PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}public Program(){//MyEvent += DoSomething;}//事件处理函数//public void DoSomething(string msg)//{  //do something  //}}

2、输入验证:在用户输入数据时,可以使用set监控属性的改变,并在发生变化时触发验证逻辑。这可以用于确保输入的数据满足特定的条件或约束。

例如,假设有一个名为User的类,其中有一个属性Age,表示用户的年龄。可以在Age属性的set方法中添加验证逻辑,比如确保年龄大于等于0。

public class User
{private int _age;public int Age{get { return _age; }set{if (value >= 0){_age = value;}else{throw new ArgumentException("年龄不为负!");}}}
}

3、日志记录:在某些情况下,需要在属性值发生变化时记录日志。可以使用set监控属性的改变,并在发生变化时记录相应的日志。

例如,假设有一个名为Order的类,其中有一个属性Status,表示订单的状态。可以在Status属性的set方法中添加日志记录逻辑,比如记录订单状态的变化。

public class Order
{private string _status;public string Status{get { return _status; }set{if (_status != value){LogStatusChange(_status, value);_status = value;}}}private void LogStatusChange(string oldStatus, string newStatus){// 记录状态变化的日志Console.WriteLine($"值的变化是由{oldStatus} 变为 {newStatus}");}
}

事实证明,“set”在处理数据上是非常好用的,灵活使用就能很快捷实现你想要的。

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

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

相关文章

2023年11月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2023年11月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

开源DB-GPT实现连接数据库详细步骤

官方文档&#xff1a;欢迎来到DB-GPT中文文档 — DB-GPT &#x1f44f;&#x1f44f; 0.4.1 第一步&#xff1a;安装Minicoda https://docs.conda.io/en/latest/miniconda.html 第二步&#xff1a;安装Git Git - Downloading Package 第三步&#xff1a;安装embedding 模型到…

seata事务回滚引起的skywalking数据库存储空间剧增的问题排查

基本信息 产品名称&#xff1a;ATS3.0 问题分类&#xff1a;编码问题 环境类型&#xff1a;环境无关 问题现象 11月1日上午华润DBA收到数据库磁盘空间告警&#xff0c;检查后发现skywalking连接的mysql数据库占用空间从之前一直是比较稳定的&#xff0c;但是10月31日…

element中el-switch用法汇总(拓展:el-switch开关点击弹出确认框时,状态先改变,点击确认/取消失效,怎么解决?)

概述&#xff1a; el-switch 表示两种相互对立的状态间的切换&#xff0c;多用于触发「开/关」。 常见用法&#xff1a; 1、绑定v-model到一个Boolean类型的变量。可以使用active-color属性与inactive-color属性来设置开关的背景色。 2、使用active-text属性与inactive-tex…

antd Form 校验自定义复杂判断-validator

antd Form 校验 加入自定义复杂逻辑 <Form.Itemlabel"编码"name"code"rules{[{required: true,validator: (_rule, value) > {if (value ) {return Promise.reject(请输入编码);}return IsExist(value).then((res) > {if (res?.statusCode 20…

强化学习中广义策略迭代

一、广义策略迭代 策略迭代包括两个同时进行的交互过程&#xff0c;一个使价值函数与当前策略保持一致&#xff08;策略评估&#xff09;&#xff0c;另一个使策略在当前价值函数下变得贪婪&#xff08;策略改进&#xff09;。在策略迭代中&#xff0c;这两个过程交替进行&…

acwing算法基础之搜索与图论--DFS

目录 1 基础知识2 模板3 工程化 1 基础知识 调用dfs()之后表示已经走到头了&#xff0c;需要往回走了&#xff08;即&#xff0c;回溯&#xff09;&#xff0c;那这时候就要恢复成调用dfs()之前的模样&#xff08;即&#xff0c;恢复现场&#xff09;。 不同的搜索顺序&#…

【Qt之QAssociativeIterable】使用

介绍 QAssociativeIterable类是QVariant中一个关联式容器的可迭代接口。这个类允许多种访问在QVariant中保存的关联式容器元素的方法。如果一个QVariant可以转换为QVariantHash或QVariantMap&#xff0c;那么QAssociativeIterable的实例可以从中提取出来。 QHash<int, QSt…

软件版本控制系统VCS工具——cvs vss svn git

版本控制 版本控制系统&#xff08;Version Control System&#xff0c;VCS&#xff09;是用于跟踪和管理源代码和文档的工具。可追踪和管理修改历史&#xff0c;包括修改的内容、时间、作者等信息。有助于团队协作、追踪变更、恢复历史版本等。VCS的主要目的是帮助团队协作开…

电脑如何截屏?一起来揭晓答案!

在数字时代&#xff0c;截屏已经成为我们日常生活和工作中的必备技能。无论是为了捕捉有趣的网络瞬间&#xff0c;保存重要信息&#xff0c;还是为了协作和教育&#xff0c;电脑截屏都是一个强大而方便的工具。本文将介绍三种电脑如何截屏的方法&#xff0c;以满足各种需求&…

研发管理工具选型要考虑哪些内容?

研发管理工具选型要考虑哪些内容&#xff1f; 研发管理工具选型需要考虑六个因素&#xff0c;分别是&#xff1a;1、功能性&#xff1b;2、非功能性&#xff1b;3、易用性&#xff1b;4、产品价格&#xff1b;5、服务&#xff1b;6、厂商。其中功能性在研发管理工具选型过程中是…

精美好看又便于分享的电子相册制作,谁看了不心动呢?

很多人都喜欢用相机记录生活中的点点滴滴&#xff0c;可是当要分享到朋友圈的时候&#xff0c;觉得这张也好看&#xff0c;那张也不错&#xff0c;如果全部分享出去就霸屏了&#xff0c;然后就不知道怎么选择了。其实&#xff0c;我们可以把这些照片做成电子相册&#xff0c;然…

手机是否能登陆国际腾讯云服务器?

在当今社会&#xff0c;跟着互联网的开展&#xff0c;越来越多的用户开始运用云服务器来存储和处理数据。其间&#xff0c;腾讯云服务器作为国内知名的云服务器供给商&#xff0c;受到了广大用户的欢迎。可是&#xff0c;有一些用户可能还不清楚手机是否能登陆腾讯云服务器。本…

docker可视化

什么是portainer&#xff1f; portainer就是docker图形化界面的管理工具&#xff0c;提供一个后台面板供我们操作 目前先用portainer(先用这个)&#xff0c;以后还会用到Rancher(CI/CD在用) 1.下载portainer 9000是内网端口&#xff0c;8088是外网访问端口 docker run…

对话凯文·凯利:AI 会取代人的 90% 技能,并放大剩余的 10%

采访 | 邹欣&#xff0c;CSDN 副总裁 作者 | 王启隆 责编 | 唐小引 出品 | 《新程序员》编辑部 5000 天后&#xff0c;你都会做些什么&#xff1f; 是和 AI 助手一起编程&#xff0c;还是让生活完全由 AI 掌控&#xff0c;自己坐享其成&#xff1f;如果到时候还要上班&a…

GFLAGS中cmakeLists的编写-OsqpEigen中cmakeLists的编写---GLOG移植

1 glog 使用 CMakeLists.txt 来组织和构建包含 glog 的项目是一个很好的选择。下面是一个如何使用 CMake 与 glog 的例子。 项目结构: ├── CMakeLists.txt └── main.cppCMakeLists.txt: cmake_minimum_required(VERSION 3.10) project(GlogExample)# 设置C++标准为C++11…

采购劳保鞋如何选择合适的尺码

今天在某问答平台看到了这么一个话题&#xff0c;平常皮鞋穿40码&#xff0c;运动鞋穿41码&#xff0c;劳保鞋如何选择合适的尺码&#xff1f;小编发现很多朋友在选购劳保鞋的时候&#xff0c;对劳保鞋的尺码了解不是很清楚都会在这一块纠结。选择鞋子脚感舒适很重要&#xff0…

射频功率放大器应用中GaN HEMT的表面电势模型

标题&#xff1a;A surface-potential based model for GaN HEMTs in RF power amplifier applications 来源&#xff1a;IEEE IEDM 2010 本文中的任何第一人称都为论文的直译 摘要&#xff1a;我们提出了第一个基于表面电位的射频GaN HEMTs紧凑模型&#xff0c;并将我们的工…

使用angr自动利用简单缓冲区溢出漏洞-insomnihack_aeg

题目来源于angr_ctf&#xff0c;c代码很简单。 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h>char component_name[128] {0};typedef struct component {char name[32];int (*do_so…

如何在Linux上搭建本地Docker Registry并实现远程连接

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…