C#委托——基础2

  在上一篇随笔中,简要说明了怎样定义委托,定义事件,订阅事件,最后也实现了效果,就是当员工类的某个对象,执行某个事件时,委托事件被触发,后面也得到了结果,但是想象一下实际场景中,如果办公室有员工玩游戏了,这个时候,我们要找到是谁,在哪个位置玩游戏,而不是向所有人广播有人玩游戏了,这样并没有什么意义。因此,需要对上篇的代码进行改进,所以就要想办法传递参数,参数中需要包含必要的信息。

  在本例中,关于参数,首先创建了一个参数类, CustomeEvebtArgs 且继承自EventArgs(这个我看的例子人家就是这样说的“是包含事件数据的类的基类”)

 1  public class CustomeEvebtArgs:EventArgs//参数类
 2     {
 3         string name = "";//员工姓名
 4         int number = 0;//所在办公室编号
 5         public CustomeEvebtArgs()
 6         {
 7         }
 8         public string Name
 9         {
10             get { return this.name; }
11             set { this.name = value; }
12         }
13         public int Number
14         {
15             get { return this.number; }
16             set { this.number = value; }
17         }
18     }

用这个参数类的对象去保存相关信息。而此时此刻,员工类就应当对应有姓名和座位号了,代码同上。

1      // 定义一个委托(打小报告的狐狸)
2     /// </summary>
3     /// <param name="sender">触发事件的源</param>
4     /// <param name="e">触发时间所携带的参数</param>
5     public delegate void DelegateClassHandle(object sender,CustomeEvebtArgs e);

此时,委托事件函数就应当带有定义委托时的上述两个参数了

PlayGame(this,e) ;

这个时候 this 代表的是该实例,也就是触发委托事件的实例。e则是该实例中的参数信息,其中e的初始化如下:

 CustomeEvebtArgs e = new CustomeEvebtArgs();e.Name = _name;e.Number = _number;

只要定义员工对象初始化后,被初始化的信息就作为参数被传递

 public void Notify(object sender,CustomeEvebtArgs e){Console.WriteLine("报告老板,{0}在{1}玩游戏哦",e.Name,((Employee)sender).Number);}

注意:处理事件的函数其函数前面一定要和委托定义时相同,如上所示。而上面的参数也可以用多种方式,既可以用参数类对象的属性表示,也可以用触发事件的实例的属性表示。

当然事件被触发后,也可以被多个函数处理,比如添加一个“罚工资”的函数

 

static void penalty(object sender, CustomeEvebtArgs e)
{
Console.WriteLine("罚款100");
}

 

这样只需我的委托函数关联上该函数即可

 e.PlayGame += new DelegateClassHandle(penalty); 这里我没有重新创建一个类,而是直接将该函数作为静态函数,让委托直接调用函数名,而在定义该函数时不要忘了和定义委托时要有同样的参数

 

转载于:https://www.cnblogs.com/80X86/p/5005085.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——深度学习之编程工具、流行网络结构、卷积神经网络结构的应用

目录 一、编程工具 caffe实现LENET-5 二、流行的网络结构 1、VGGNET 2、Googlenet ​ 3、ResNet​ ​ 三、卷积神经网络的应用 1、人脸识别 ​ 2、人脸验证 3、人脸特征点检测 4、卷积神经网络压缩 一、编程工具 caffe的优点&#xff1a;模型标准化&#xff0c;源代码…

Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角测距 激光三角测距法原理很简单,是通过一束激光以一定的入射角度照射被测目标,激光在目标表面会产生漫反射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合组件)位置传感器上。当被测物体沿激光方向发生移动时,…

【转】如何实现一个文件系统

如何实现一个文件系统 摘要 本章目的是分析在Linux系统中如何实现新的文件系统。在介绍文件系统具体实现前先介绍文件系统的概念和作用&#xff0c;抽象出文件系统概念模型。熟悉文件系统的内涵后&#xff0c;我们再进一步讨论Linux系统中文件系统的特殊风格和具体文件系统在Li…

【tenserflow】——数据类型以及常用属性

目录 一、什么是Tensor&#xff1f; 二、Tensorflow常见数据类型 三、Tensorflow常见属性device\cpu\gpu\ndim\shape\rank等 1、创建一个tensor 1&#xff09;tf.constant() 2)tf.Variable() 2、判断一个变量是否为tensor张量 3、生成不同设备&#xff08;cpu,gpu&#x…

C# 事件详解附实例分析

一、定义 事件是两个对象间发布消息和响应后处理消息的过程&#xff0c;通过委托类型来实现的。 事件的机制被称为发布-订阅机制&#xff0c;其算法过程为&#xff1a;首先定义一个委托类型&#xff0c;然后在发布者类中声明一个event事件&#xff0c;同时此类中还有一个用来触…

网页开发浏览器兼容性问题

1、在ie6下的双margin问题 在ie6下&#xff0c;设置了float的元素&#xff0c;以float:left为例&#xff0c;如图所示。会出现第一个浮动元素&#xff0c;即相对于父级元素浮动的&#xff0c;会出现双倍margin的问题。 注意仅仅是相对于父级元素浮动的&#xff0c;即第一个会出…

【tensorflow】——创建tensor的方法

目录 1、tf.constant() 2、tf.Variable() 3、tf.zeros():用0去填充指定形状的数组 4、tf.convert_to_tensor(a,dtypetf.int32) 5、tf.ones():用1去填充指定形状的数组 6、tf.fill():用指定的元素去填充指定形状的数组 7、随机化初始化进行创建 1&#xff09;normal正态分…

Halcon —— 图像像素类型与转换

图像类型 就目前工业领域主流的图像处理工具halcon来讲&#xff0c;有以下几种图像类型&#xff1a;‘byte’, ‘complex’, ‘cyclic’, ‘direction’, ‘int1’, ‘int2’, ‘int4’, ‘int8’, ‘real’, ‘uint2’&#xff0c;具体含义如下图所示。 ‘byte’ 每像素1字节…

软件方法

核心工作流业务建模&#xff08;组织建模&#xff09;&#xff1a;描述组织内部各个系统如何协作&#xff0c;使得组织可以为其他的组织提供有价值的服务&#xff0c;新系统只不过是组织为了对外提供更好的服务&#xff0c;对自己的内部重新设计而购买的一个零件。需求&#xf…

修改vim中的tab为4个空格

记录一下&#xff0c;避免用时还得搜........ 1、临时修改 在vi中&#xff0c;set tabstop4 或 set ts4  2、永久修改 vi --version 查看要修改的文件如果是vim的话&#xff0c;修改~/.vimrc如果是vi&#xff0c;修改~/.exrc加上&#xff1a;set tabstop4set nu //显示行号set…

Halcon例程详解(基于卡尺工具的匹配测量方法) —— measure_stamping_part.hdev

前言 1卡尺工具介绍 Halcon中的Metrology方法即为卡尺工具&#xff0c;可用来拟合线&#xff0c;圆&#xff0c;这种方法对于目标比背景很明显的图像尺寸测量是很方便的&#xff0c;不需要用blob进行边缘提取等&#xff0c;但缺点也很明显&#xff0c;需要目标的相对位置基本…

【TensorFlow】——不同shape的tensor在神经网络中的应用(scalar,vector,matrix)

目录 ​ 1、scalar——标量 1&#xff09;在神经网络中存在的场景 2&#xff09;one_hot编码 3&#xff09;举例应用 2、vector——向量 ​ 3、matrixs——矩阵 4、dim3的tensor 5、dim4的tensor 6、dim5的tensor 本文主要的目的是让初学者对tensor的各种形式的使用场…

404页面 3秒后跳到首页 实现

---恢复内容开始--- 当我们访问一个页面不存在的时候&#xff0c;就会跳到404页面 一般网站都在在404页面中做一个处理&#xff0c; 就是当用户3秒种内还没有任何操作的话&#xff0c;就会自动跳转到其它页面 技术实现有两种方法 1. 在404页面中的header间加上 <meta http-e…

Java - I/O

File类 java.io操作文件和目录&#xff0c;与平台无关。具体的常用实例方法&#xff1a; File file new File("."); // 以当前路径创建名为 "." 的 File 对象   文件目录信息函数     -   String getName/Path/Parent()&#xff1a; 文件名/路径…

Halcon —— 边缘检测算子详解

一、算子介绍 1.1 种类 halcon内常用的边缘检测算子包括如下几种&#xff1a; 1.edges_image: 提取2D 图像边缘 2.edges_sub_pix&#xff1a;提取2D图像亚像素边缘 3.edges_object_model_3d &#xff1a;提取3D图像边缘 4.edges_color和edges_color_sub_pix&#xff1a;提取彩…

【TensorFlow】——索引与切片

目录 1、利用index进行索引 2、利用“&#xff1a;”和“...”进行索引与切片 3、tf.gather&#xff08;&#xff09;——对一个维度进行乱序索引 优势&#xff1a; 缺点&#xff1a; 例子 4、tf.gather_nd()——同时对多个维度进行索引 5、tf.boolean_mask()——通过布…

华硕(ASUS)X554LP笔记本一开机就进入aptio setup utility 问题的解决

某次因大意一直未插电&#xff0c;华硕&#xff08;ASUS&#xff09;X554LP笔记本后来没电关机。后来每次一开机就进入aptio setup utility界面&#xff0c;按F9调入默认配置&#xff0c;F10保存后退出&#xff0c;重启仍然进入aptio setup utility。 网上查了一下&#xff0c;…

redis和memcached缓存

memcached memcache开源的&#xff0c;高性能&#xff0c;高并发分布式内存缓存系统,天生支持集群 memcached下载地址&#xff1a; http://memcached.org/downloads python实现memcached缓存 pip3 install python-memcached import memcache aamemcache.Client(["10.0.0.2…

C# —— 进程与线程的理解

定义 进程 进程&#xff08;Process&#xff09;是Windows系统中的一个基本概念&#xff0c;它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程&#xff0c;进程可以包括一个或多个线程。 程序是在特定操作系统上的可执行文件&#xff0c…

git安装和初步使用

基本参照以下链接&#xff1a; http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000 注意&#xff1a; &#xff08;1&#xff09;每台电脑对于github来说都有对应的ssh密钥&#xff0c;…