c#中事件的定义
事件的声明和例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
Customer c = new Customer();//事件拥有者
Waiter w = new Waiter();//事件响应者
c.Order += w.WaiterAction;//事件订阅,从下面的代码中可以简单的理解为:事件的拥有者调用CustomerAction方法的时候,在此方法中通过委托调用事件响应者的WaiterAction方法。
//我理解的委托就是:c#把c/c++中的方法指针进一步封装并去掉了指针的概念,然后叫做委托(一个委托就代表着一个方法)。
//那么事件存在的意义是什么呢?是为了让程序逻辑更加严密,更加安全。
c.CustomerAction();//用户点菜
c.pay();//用户付账
}
}
//点餐参数
public class OrderEventArgs:EventArgs
{
public String DishName { set; get; }//名字
public String Size { get; set; }//大分/小分
}
//声明一个委托类型,委托一个没有返回值,两个参数的方法
public delegate void OrderEventHander(Customer c,OrderEventArgs e);
//顾客
public class Customer
{
//存储事件处理器,即把事件交给哪一个方法执行
private OrderEventHander orderEventHander;
//声明事件 另外OrderEventHander用于约束委托类型,即事件处理器只能是这种类型
public event OrderEventHander Order{
add
{
this.orderEventHander += value;
}
remove
{
this.orderEventHander -= value;
}
}
public double Bill { get; set; }//账单
public void pay()
{
//付钱
Console.WriteLine("付钱:{0}",Bill);
}
//点菜动作
public void CustomerAction()
{
OrderEventArgs e = new OrderEventArgs();
e.Size = "large";
e.DishName = "cai";
orderEventHander(this,e);//触发事件
}
}
//服务生
public class Waiter
{
//服务生的事件处理器,也即用户触发点菜事件时,执行的方法
internal void WaiterAction(Customer c, OrderEventArgs e)
{
Console.WriteLine("Waiter:上菜");
double p = 10;
switch (e.Size)
{
case "small":
p *= 0.5;
break;
case "large":
p *= 1.5;
break;
default:
break;
}
c.Bill += p;
}
}
}
评论区
请写下您的评论...
猜你喜欢
ofc
c#中自定义委托
weblog
2619
代码:namespaceConsoleApplication3{//声明自定义委托(委托方法的返回值为int,有两个int类型的形参)publicdelegateintdelegateTest
ofc
vue表达式-数据绑定-事件绑定
weblog
1842
vue表达式-数据绑定-事件绑定!DOCTYPEhtmlhtml head metacharset="UTF-8" title/title scriptsrc="https
ofc
vue使用插件和自定义插件
weblog
2313
自定义一个插件.js(function(){ //需要向外暴露的插件对象 constMyPlugin={}; MyPlugin.install=function(Vue,options){ //1
rabbitmq,springboot
1635
客户端应用程序。
为了消费事件,应用程序需要声明一个队列,并绑定到一个系统指定的交换器去消费消息。
插件在默认的虚拟主机上声明了一个topic类型的exchange(交换器
weblog
1572
layuitable表格单选事件监听以及选中数据获取表格设置table.render({ elem:'#test' ,url:'[[@{/smmc/artificial}]]'+'?xsId
ofc
c#中的数据类型
weblog
3061
c#中的数据类型
c#中的数据类型分为值类型和引用类型
值类型有包括(结构体类型,枚举类型)
引用类型又包括(类类型,数组类型,接口类型,委托类型)
c#数据类型的派生谱系
值类型
ofc
c / c++中的函数指针
weblog
2264
一个案例说明#includeiostreamusingnamespacestd;/**定义函数指针*///typedef声明为一个指针函数类型MethodPointer//int为指针指向函数的返回
blog
Spring中七种事务传播行为
算法基础
995
一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY使用当前的事务,如果
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。