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

专门做外国的网站吗怎样制作个人网站

专门做外国的网站吗,怎样制作个人网站,美丽说网站建立的主要方式,品牌网站建设的好的案例文章目录 前言‌1. 事件的核心概念‌‌2. 事件的声明与使用‌‌3. 标准事件模式(EventHandler 和 EventArgs)‌4. 事件与委托的区别‌‌5. 事件的使用场景‌‌6. 高级特性‌‌7. 注意事项‌‌8. 完整示例:温度监控系统‌‌9. 常见问题‌ 前言…

文章目录

  • 前言
  • ‌1. 事件的核心概念‌
  • ‌2. 事件的声明与使用‌
  • ‌3. 标准事件模式(EventHandler 和 EventArgs)‌
  • 4. 事件与委托的区别‌
  • ‌5. 事件的使用场景‌
  • ‌6. 高级特性‌
  • ‌7. 注意事项‌
  • ‌8. 完整示例:温度监控系统‌
  • ‌9. 常见问题‌

前言

在 C# 中,‌事件(Event)‌ 是基于委托(Delegate)的机制,用于实现‌发布-订阅(Publish-Subscribe)模式‌。事件允许对象(发布者)通知其他对象(订阅者)某个特定动作已发生(如按钮点击、数据更新)。以下是事件的详细讲解:


‌1. 事件的核心概念‌

  • 发布者(Publisher)‌:触发事件的对象(如按钮控件)。
  • ‌订阅者(Subscriber)‌:响应事件的对象(如事件处理方法)。
  • ‌事件委托(Event Delegate)‌:定义事件的签名(参数和返回值)。
  • ‌封装性‌:事件对外部仅暴露 +=(订阅)和 -=(取消订阅),无法直接触发或覆盖。

‌2. 事件的声明与使用‌

‌(1) 声明事件‌

public class Button
{// 1. 定义委托类型(约定返回 void,参数为 object 和 EventArgs 派生类)public delegate void ClickEventHandler(object sender, EventArgs e);// 2. 声明事件(基于委托)public event ClickEventHandler? Clicked;// 3. 触发事件的方法(protected virtual 以便派生类重写)protected virtual void OnClicked(EventArgs e){Clicked?.Invoke(this, e);  // 安全调用(若没有订阅者为 null)}// 4. 外部触发的入口(如用户点击按钮)public void Click(){OnClicked(EventArgs.Empty);  // 触发事件}
}

‌(2) 订阅事件‌

public class Program
{public static void Main(){Button button = new Button();// 订阅事件(通过 +=)button.Clicked += Button_Clicked;button.Clicked += (sender, e) => Console.WriteLine("Lambda 表达式处理点击事件");// 取消订阅(通过 -=)// button.Clicked -= Button_Clicked;}// 事件处理方法private static void Button_Clicked(object sender, EventArgs e){Console.WriteLine("按钮被点击!");}
}

‌3. 标准事件模式(EventHandler 和 EventArgs)‌

.NET 提供了标准委托类型 EventHandler 和基类 EventArgs,避免重复定义委托:

// 标准事件声明
public event EventHandler? Clicked;  // 等价于 EventHandler<EventArgs>// 自定义事件参数
public class TemperatureChangedEventArgs : EventArgs
{public double OldTemperature { get; }public double NewTemperature { get; }public TemperatureChangedEventArgs(double oldTemp, double newTemp){OldTemperature = oldTemp;NewTemperature = newTemp;}
}// 使用泛型 EventHandler<T>
public event EventHandler<TemperatureChangedEventArgs>? TemperatureChanged;

4. 事件与委托的区别‌

‌特性‌委托(Delegate)‌事件(Event)
访问权限‌可被外部直接调用或赋值‌仅允许 += 和 -= 操作
封装性‌低(暴露委托实例)‌ 高(隐藏触发逻辑)
用途‌ 通用回调机制‌特定于发布-订阅场景

‌5. 事件的使用场景‌

  • UI 交互‌:按钮点击、文本框输入、窗口关闭。
  • ‌数据通知‌:属性值变化、定时器触发。
  • ‌异步操作‌:文件下载完成、网络请求响应。
  • ‌插件系统‌:动态加载模块的事件响应。

‌6. 高级特性‌

‌(1) 自定义事件访问器(add/remove)‌
可自定义事件的订阅和取消订阅逻辑:

private EventHandler? _clicked;public event EventHandler Clicked
{add {_clicked += value;Console.WriteLine("事件被订阅");}remove {_clicked -= value;Console.WriteLine("事件被取消订阅");}
}

‌(2) 线程安全的事件触发‌
在多线程场景中,需确保事件触发安全:

// 复制委托引用,避免触发时订阅者被修改
EventHandler? handler = TemperatureChanged;
if (handler != null)
{handler(this, e);  // 直接调用,非空时触发
}

‌7. 注意事项‌

  • 内存泄漏‌:若订阅者是对象方法,需及时取消订阅(否则对象无法被 GC 回收)。
  • ‌空事件检查‌:触发事件前检查是否为 null(无订阅者)。
  • 事件命名‌:事件名通常以动词过去式命名(如 Clicked、DataLoaded)。
  • 避免长时间阻塞‌:事件处理应快速完成,避免阻塞发布者线程。

‌8. 完整示例:温度监控系统‌

public class TemperatureSensor
{private double _currentTemperature;public event EventHandler<TemperatureChangedEventArgs>? TemperatureChanged;public double CurrentTemperature{get => _currentTemperature;set{if (_currentTemperature != value){var oldTemp = _currentTemperature;_currentTemperature = value;OnTemperatureChanged(oldTemp, value);}}}protected virtual void OnTemperatureChanged(double oldTemp, double newTemp){TemperatureChanged?.Invoke(this, new TemperatureChangedEventArgs(oldTemp, newTemp));}
}// 订阅者
public class Display
{public void Subscribe(TemperatureSensor sensor){sensor.TemperatureChanged += HandleTemperatureChange;}private void HandleTemperatureChange(object? sender, TemperatureChangedEventArgs e){Console.WriteLine($"温度从 {e.OldTemperature}℃ 变更为 {e.NewTemperature}℃");}
}// 使用
var sensor = new TemperatureSensor();
var display = new Display();
display.Subscribe(sensor);sensor.CurrentTemperature = 25.5;  // 触发事件

‌9. 常见问题‌

1:为什么事件通常定义为 virtual?‌

  • 允许派生类重写事件触发逻辑(如添加日志或验证)。

2:如何传递自定义数据?‌

  • 继承 EventArgs 并定义包含数据的派生类(如 TemperatureChangedEventArgs)。

3:事件和观察者模式的关系?‌

  • 事件是观察者模式在 C# 中的实现,发布者相当于 Subject,订阅者相当于 Observer。

通过事件,C# 提供了一种类型安全、松耦合的方式来实现对象间的通信,是构建响应式应用程序的核心机制。


文章转载自:

http://OjJeNgT4.rckdq.cn
http://rhqecKiC.rckdq.cn
http://aiS5ASYL.rckdq.cn
http://KdI5rSAE.rckdq.cn
http://PECaIYMY.rckdq.cn
http://lfL2cQUH.rckdq.cn
http://ZlcF6Rqw.rckdq.cn
http://MzTpvqs8.rckdq.cn
http://fRDwYy2T.rckdq.cn
http://iurxKU1t.rckdq.cn
http://8HpGd3vX.rckdq.cn
http://L2Vtk8eK.rckdq.cn
http://HotXdnhp.rckdq.cn
http://9uzgajXA.rckdq.cn
http://FxOaQHHi.rckdq.cn
http://pA4sBXli.rckdq.cn
http://ZvEqPOm2.rckdq.cn
http://ztd96MDr.rckdq.cn
http://Bl1WQ8qa.rckdq.cn
http://1dHO5qLN.rckdq.cn
http://pPsNQgB1.rckdq.cn
http://7Bp3BXBV.rckdq.cn
http://fkF6If2U.rckdq.cn
http://0JlDbncR.rckdq.cn
http://qTahNjMb.rckdq.cn
http://iPCUfS01.rckdq.cn
http://3OLvziLR.rckdq.cn
http://HmDmFCaY.rckdq.cn
http://1I087fUA.rckdq.cn
http://smnGM0N1.rckdq.cn
http://www.dtcms.com/wzjs/613780.html

相关文章:

  • 网站收录提交工具房产交易网站开发
  • 学校官方网站网页设计企业网站做seo的必要性
  • 外贸单页网站案例秀米同步到Wordpress
  • 山东省建设注册执业中心网站外贸网站 中英
  • 宣讲家网站官德修养与作风建设网站建设的经费预算
  • 个人网站设计师wordpress如何加数据库名
  • 本地的上海网站建设公司图书馆 网站建设
  • 家电维修 做网站还是搞公众号网站资料如何做参考文献
  • 什么是网站的自适应网络服务和 网络管制问题
  • 网站的内容和功能永久免费素材网站
  • 百度不收录哪些网站留言的网页怎么制作
  • 平安建设 十户长网站地址常熟建设合同备案在哪个网站
  • html5 网站搭建章丘做网站的公司
  • 阿里巴巴网站建设品牌全案
  • wordpress外贸网站增加个博客栏深圳最好的网站制作公司
  • 公司网站包含哪些内容手机网站首页
  • 重庆seo网站推广工具如何规划网站栏目
  • 深圳网站排名优化公司广告机信息发布系统软件
  • 阿里邮箱登录入口百度做网站优化多少钱一年
  • 软件下载网站如何履行网络公司排名及分析
  • 广州有做虚拟货币网站seo整站优化系统
  • 大型大型网站建设建设网站需要什么信息
  • h5自适应网站模板下载WordPress杂志模板
  • wordpress 记事本太原搜索引擎优化招聘信息
  • 在长沙做网站淄博网站开发网泰快
  • 订单拆单在电商网站建设网站做代练
  • 校园官方网站建设企业网站设计制作教程
  • 鹿泉外贸网站建设马鞍山网站建设 明达
  • 网站内链如何布局宁波seo服务推广
  • 个人网站可以不备案吗visual studio网站开发教程