当前位置: 首页 > news >正文

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”在处理数据上是非常好用的,灵活使用就能很快捷实现你想要的。

相关文章:

  • 提升ChatGPT答案质量和准确性的方法Prompt专家
  • react_11
  • 消息中间件-RabbitMQ介绍
  • 机器人伺服驱动控制环
  • python爬虫(数据获取——selenium)
  • 【css】sass中的模块化
  • Jmeter_逻辑控制器
  • JavaScript继承的几种方式
  • Python中 lambda 的妙用
  • 昇腾CANN 7.0 黑科技:DVPP硬件加速训练数据预处理,友好解决Host CPU预处理瓶颈
  • TCP/IP的基础知识
  • C# 继承,抽象,接口,泛型约束,扩展方法
  • 微服务中配置文件(YAML文件)和项目依赖(POM文件)的区别与联系
  • 使用 AIGC ,ChatGPT 快速合并Excel工作薄
  • VMWare中的Centos7,DHCP获取不到IP地址
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • flask接收请求并推入栈
  • node学习系列之简单文件上传
  • tweak 支持第三方库
  • Zsh 开发指南(第十四篇 文件读写)
  • 搞机器学习要哪些技能
  • 配置 PM2 实现代码自动发布
  • 巧用 TypeScript (一)
  • 温故知新之javascript面向对象
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​批处理文件中的errorlevel用法
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (ibm)Java 语言的 XPath API
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (十) 初识 Docker file
  • (学习日记)2024.02.29:UCOSIII第二节
  • ***原理与防范
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core Web APi类库如何内嵌运行?
  • .NET MVC 验证码
  • .Net 垃圾回收机制原理(二)
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .net经典笔试题
  • .pop ----remove 删除
  • @JoinTable会自动删除关联表的数据
  • @Resource和@Autowired的区别
  • [ C++ ] STL---string类的使用指南
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [Android 数据通信] android cmwap接入点