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

设计网站手机app客户端微信扫码点餐小程序

设计网站手机app客户端,微信扫码点餐小程序,响应式html5网页模板,wordpress iis 伪静态规则一、事件派发器 在C#中,事件派发器通常是指事件委托和事件处理程序的组合,用于实现一种观察者设计模式。它允许对象在状态发生变化时通知其他对象,从而实现对象之间的解耦。 事件派发器的基本组成部分: 事件委托(Ev…

一、事件派发器

在C#中,事件派发器通常是指事件委托和事件处理程序的组合,用于实现一种观察者设计模式。它允许对象在状态发生变化时通知其他对象,从而实现对象之间的解耦。

事件派发器的基本组成部分:

事件委托(Event Delegate): 事件委托是一种特殊的委托,用于封装可以被调用的方法。它定义了事件的签名,即指定了事件处理程序方法的参数和返回类型。通常,事件委托声明在事件派发器类的外部,并且使用 delegate 关键字来定义。例如:

public delegate void MyEventHandler(object sender, EventArgs e);

事件(Event): 事件是事件委托的实例,它提供了一种触发事件和订阅事件的机制。在事件派发器类中声明事件,其他类可以通过订阅该事件来注册事件处理程序。事件通常使用event关键字声明。例如:

public event MyEventHandler MyEvent;

事件处理程序(Event Handler): 事件处理程序是一个方法,用于响应事件的发生。它必须具有与事件委托相同的签名。当事件被触发时,与该事件关联的事件处理程序将被调用。例如:

public void MyEventHandlerMethod(object sender, EventArgs e) 

{

//其他逻辑

}

事件触发器(Event Trigger): 事件触发器是事件派发器类中的方法,用于触发事件。当某些条件满足时,调用事件触发器方法将会触发事件,从而执行与事件关联的事件处理程序。通常,事件触发器方法使用protected 或protected virtual修饰,以便子类可以重写它。例如:

protected virtual void OnMyEvent(EventArgs e)

{

MyEvent?.Invoke(this, e);

}

Invoke 方法用于触发事件,它的第一个参数是事件的发布者(通常是 this ,表示当前对象),第二个参数是一个包含事件信息的EventArgs 对象e。

示例:假设我们有一个游戏中的角色类 Player,我们想要在角色受到伤害时触发一个事件来通知其他对象,比如显示受伤效果或更新 UI。

首先,定义一个事件委托和一个事件:

using System;

public class Player
{
    // 事件委托
    public delegate void DamageEventHandler(int damageAmount); 

   // 事件
    public event DamageEventHandler Damaged;
    // 触发受伤事件的方法
    public void TakeDamage(int damageAmount)
    {
    //触发受伤事件
        OnDamaged(damageAmount);
    }
    //触发事件的方法
    protected virtual void OnDamaged(int damageAmount)
    {
     //检查事件是否有订阅者,如果有则调用事件处理程序
        Damaged?.Invoke(damageAmount);
    }
}
在这个例子中,DamageEventHandler 是一个事件委托,定义了一个受伤事件的签名,即参数为受到的伤害值。Damaged 是一个事件,它使用了 DamageEventHandler 委托。

再创建一个订阅事件的类 DamageEffect,用于处理角色受到伤害时的效果:

using System;

public class DamageEffect
{
    // 受伤事件处理程序
    public void OnPlayerDamaged(int damageAmount)
    {
        Console.WriteLine("角色受到伤害的效果");
    }
}

最后,创建一个 Main 方法来模拟游戏的运行过程,并进行事件的订阅和触发:

class Program
{
    static void Main(string[] args)
    {
        Player player = new Player();
        DamageEffect damageEffect = new DamageEffect(); 
        player.Damaged += damageEffect.OnPlayerDamaged;// 订阅事件
        player.TakeDamage(20); // 触发事件
    }
}

在Main方法中,创建了 Player 和 DamageEffect 的实例,并将 DamageEffect 的QnPlayerDamaged 方法订阅到了 Player 的 Damaged 事件上。

然后,通过调用 TakeDamage 方法来模拟角色受到了20点伤害,这将触发Damaged事件,最终调用 QnPlayerDamaged 方法,显示了受伤效果并输出了相应的信息。这是因为通常在 C# 中,事件可以被订阅,而当事件被触发时,所有订阅了该事件的方法都会被调用。

二、定时器

C#中的四种常用的定时器:

1. System.Windows.Forms.Timer

System.Windows.Forms.Timer是Windows窗体应用程序中常用的定时器。它是基于消息循环的,工作在UI线程上,并且适用于Windows窗体应用程序的GUI更新。

示例:

using System;
using System.Windows.Forms;

public class MyForm : Form
{
    private Timer timer;

    public MyForm()
    {
        timer = new Timer();
        timer.Interval = 1000; // 每秒触发一次
        timer.Tick += Timer_Tick; // 订阅 Tick 事件
        timer.Start(); // 启动定时器
    }

    private void Timer_Tick(object sender, EventArgs e)
    {

        Console.WriteLine("计时器触发时间: " + DateTime.Now);
    }
}
2. System.Threading.Timer

System.Threading.Timer是在.NET中常用的多线程环境下的定时器。它是基于线程池的,可以在一个独立的线程中触发回调函数。

示例:

using System;
using System.Threading;

public class MyTimer
{
    private Timer timer;

    public MyTimer()
    {
        timer = new Timer(TimerCallback, null, 0, 1000); // 每秒触发一次
    }

    private void TimerCallback(object state)
    {
        Console.WriteLine("计时器触发时间: " + DateTime.Now);
    }
}

3. System.Timers.Timer

System.Timers.Timer是在.NET中常用的定时器,类似于`System.Threading.Timer,但是它更适合于在单线程环境下使用,例如Windows服务等。

示例:

using System;
using System.Timers;

public class MyTimer
{
    private Timer timer;

    public MyTimer()
    {
        timer = new Timer(1000); // 每秒触发一次
        timer.Elapsed += Timer_Elapsed; // 订阅 Elapsed 事件
        timer.Start(); // 启动定时器
    }

    private void Timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine("计时器触发时间: " + DateTime.Now);
    }
}

4. System.Windows.Threading.DispatcherTimer

System.Windows.Threading.DispatcherTimer是用于WPF应用程序的定时器,它与System.Windows.Forms.Timer类似,但是工作在WPF 的UI线程上。

示例:

using System;
using System.Windows.Threading;

public class MyViewModel
{
    private DispatcherTimer timer;

    public MyViewModel()
    {
        timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(1); // 每秒触发一次
        timer.Tick += Timer_Tick; // 订阅 Tick 事件
        timer.Start(); // 启动定时器
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        Console.WriteLine("计时器触发时间: " + DateTime.Now);
    }
}
 

http://www.yayakq.cn/news/392470/

相关文章:

  • 做电商网站前端需要什么框架简单编程代码大全
  • 网站怎么伪静态网站wordpress用户数据同步
  • ssr网站开发网站建设人群定位
  • 苏州的网络公司网站建设自己做网站步骤 域名
  • 百度的网站关键词被篡改中国建设银行网站首页
  • 做网站字体网站建设 项目书 框架
  • 六安建设厅网站php 判断 $_get 然后跳转到相印的网站
  • 建设银行 福建分行招聘网站狗铺子做网页在那个网站
  • 做视频教育网站制作古城西安网页
  • 个人可以架设网站吗杭州高端企业网站建设
  • 常用来做网站首页wordpress页面内容
  • 宁波市余姚建设局网站网站建设介绍文字
  • 南宁企业如何建网站中山网站建设文化策划书
  • 内部网站管理办法照片网站模版
  • 网站建设前期需要做出的准备山西太原网站建设
  • 徐州有哪些做网站门户网站 商城系统
  • 成都信用体系建设网站山东网站备案公司
  • 做便民工具网站怎么样电商类网站开发费用
  • 怎么样建设一个电影网站视频下载wordpress 门户网站
  • 北理工网站开发与应用答案办网站如何备案
  • 网站做代理还可以刷水吗推广普通话主题班会
  • asp网站后台管理教程分类信息网站怎么做SEO
  • dede茶叶网站模板网站建设与维护试卷 一
  • 网站开发费用是研发费用网页制作下载什么软件
  • 松原做网站三合一网站什么意思
  • 房产网站内容建设部门规划辽宁建设工程信息网停用
  • ppt要怎么做网站网页设计与制作课程实施报告
  • 在线做ppt模板下载网站吉林省建设厅
  • 学校网站建设系统商务网站开发需求分析
  • 长春找工作最新招聘信息seo工作怎么样