博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
set 赋值(转载)
阅读量:6838 次
发布时间:2019-06-26

本文共 903 字,大约阅读时间需要 3 分钟。

名著《C#设计模式》第9章“观察者模式”涉及了标准的事件处理流程,作者在探讨属性值变更时给出一个如下示例代码(P73-74):

pulbic abstract class TpeakFunction {
private double _tPeak; public event EventHandler Change; .... public double Tpeak {
get{ return _tPeak; } set {
_tPeak = value; // 直接给值 if(Change != null) // 非空调用事件处理方法 {
Change(this, EventArgs.Empty); } } } }

在 上述代码的set方法中,不管是否修改了当前的_tPeak值,都将引发Change事件(如果事件处理方法非空)。一般而言,只有修改了当前值才需要引 发属性值变更通知事件。好的set方法编码习惯是:先判断值是否改变,即使没有事件通知调用。修改上述set方法如下:

set {
if(_tPeak != value) // 先判断值是否改变 {
_tPeak = value; if(Change != null) {
Change(this, EventArgs.Empty); } } }

效率上看,虽然增加了一个if判断,但事件处理或赋值语句的代价一般而言更高。 另一个问题就是,创建对象时如何获得初始值的变更通知?一个解决方法是:在类的构造函数中调用Change()事件。

转载于:https://www.cnblogs.com/LiMin/p/3586346.html

你可能感兴趣的文章
[转]iOS框架和服务
查看>>
linux 忘记root密码的解决办法
查看>>
[题解]UVA10129 Play on Words
查看>>
第一章 财务管理基本原理
查看>>
求冒泡的次数 (树状数组)
查看>>
快速傅里叶变换(FFT)
查看>>
loj2541【PKUWC2018】猎人杀
查看>>
API编程的详细介绍(转)
查看>>
如何自定义一个优雅的ContentProvider
查看>>
地理定位Geolocation API
查看>>
asp.net mvc用jquery向action提交json列表数据
查看>>
mybatis 多个中间表查询映射
查看>>
Cannot find module '../lib/utils/unsupported.js'
查看>>
asp.net Treeview控件
查看>>
041_SQL逻辑查询语句执行顺序
查看>>
golang传参方式
查看>>
mongodb的windows系统下安装
查看>>
sql2005,sa登录失败
查看>>
如何提高上传带宽
查看>>
(转) Apache Shiro 使用手册(三)Shiro 授权
查看>>