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.pswp.cn/news/256343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256343.shtml
英文地址,請注明出處:http://en.pswp.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;…