1. 程式人生 > >c#的事件實現的原理

c#的事件實現的原理

using System;
namespace Events
{
        
delegatevoid SomeDelegate(string sender);
        
interface ISomeInterface
        {
                
event SomeDelegate SomeEvent;
                
void PerformSomeEvent();
                
void SomeEventHandler(string sender);
        }
        
abstractclass AbstractClass:ISomeInterface
        {
                
publicvirtualevent SomeDelegate SomeEvent;
                
publicabstractvoid SomeEventHandler(string sender);
                
publicabstractvoid  PerformSomeEvent();
                
protectedvoid PerformSomeEventInternal(string sender)
                {
                        
if(null!=SomeEvent)
                        {
                                SomeEvent(sender);
                         }
                 }
                
protectedvoid SomeEventHandlerInternal(string sender,string receiver)
                {
                        Console.WriteLine(
"some event has been handler");
                        Console.WriteLine(
" Sender is ["+ sender+"]");
                        Console.WriteLine(
"Receiver is ["+receiver+"]");
                        Console.WriteLine(
"------------------------------------");
                 }       
         }   
        
class SomeClass:AbstractClass,ISomeInterface
        {
                
publicoverridevoid PerformSomeEvent()
                {
                        PerformSomeEventInternal(
"Some Class");
                }
                
publicoverridevoid SomeEventHandler(string sender)
                {
                        SomeEventHandlerInternal(sender,
"Some Class");
                 }       
        }  
        
class AnotherClass:AbstractClass,ISomeInterface
        {
                
publicoverridevoid PerformSomeEvent()
                {
                        PerformSomeEventInternal(
"Another Class");
                }
                
publicoverridevoid SomeEventHandler(string sender)
                {
                        SomeEventHandlerInternal(sender,
"Another Class");
                 }       
        }  
        
class SomeApplication
        {
                
publicstaticvoid SomeEventStaticHander(string sender)
                {
                        Console.WriteLine(
"some event has been handler.");
                        Console.WriteLine(
" Sender is ["+ sender+"]"); 
                        Console.WriteLine(
"Receiver is [some application]");
                        Console.WriteLine(
"-------------------------------------");
                 }
                
staticvoid Main(string [] args)
                {
                        SomeClass someclass
=new SomeClass();
                        AnotherClass anotherclass
=new AnotherClass();
                        someclass.SomeEvent
+=new SomeDelegate(someclass.SomeEventHandler);
                        someclass.SomeEvent
+=new SomeDelegate(anotherclass.SomeEventHandler);
                        someclass.SomeEvent
+=new SomeDelegate(SomeApplication.SomeEventStaticHander);
                        someclass.PerformSomeEvent();
                        Console.ReadLine();
                 } 
         }
}

相關推薦

uiscrollview的touch事件 以及上面子檢視touch事件 實現原理

我們知道當多個檢視進行疊加的時候,touch事件是作用到最上面的檢視上,但是如果父檢視是UIScrollView,如果預設,可能touch子檢視會造成UIScrollView的滾動。 UIScrollView滾動的原因,可以看UIScrollView 原理。 我在這裡

淺析C# Dictionary實現原理

不能 新增 hash表 優點 插入 ava 原理 是什麽 需要 目錄 淺析C# Dictionary實現原理 一、前言 二、理論知識 1、Hash算法 2、Hash桶算法 3、解決沖突算法 三、Dictionary實現 1. Entry結構體 2. 其它關鍵私有變量 3

C++ string實現原理

C++程式設計師編碼過程中經常會使用string(wstring)類,你是否思考過它的內部實現細節。比如這個類的迭代器是如何實現的?物件佔多少位元組的記憶體空間?內部有沒有虛擬函式?記憶體是如何分配的?構造和析構的成本有多大?筆者綜合這兩天閱讀的原始碼及個人理解簡要介紹之

C# 事件訂閱、退訂簡單實現原理

這裡以汽車經銷商、顧客為例說明(當顧客訂閱了汽車資訊後,就能夠接受汽車經銷商傳送的訊息) 1、新建一個事件監聽類,如下所示: using System; using System.Collections.Generic; using System.Linq; using System.Tex

c#的事件實現原理

using System;namespace Events{        delegatevoid SomeDelegate(string sender);        interface ISomeInterface        {                event SomeDelegate 

C#中foreach實現原理

示例 元素 res 過程 false 編程語言 static posit this 本文主要記錄我在學習C#中foreach遍歷原理的心得體會。 對集合中的要素進行遍歷是所有編碼中經常涉及到的操作,因此大部分編程語言都把此過程寫進了語法中,比如C#中的foreach。經

C++多態的實現原理

記得 找到 內部 轉載 文件 調用函數 參數 角度 個數 轉載自http://blog.csdn.net/tujiaw/article/details/6753498 1. 用virtual關鍵字申明的函數叫做虛函數,虛函數肯定是類的成員函數。2. 存在虛函數的類都有一個一

C++ 多態的實現原理

編譯 實現原理 父類 調用 blog 區分 所有 存儲 print 當類中聲明虛函數時,編譯器會在類中生成一個虛函數表 虛函數表是一個存儲類成員函數指針的數據結構 虛函數表是由編譯器自動生成與維護的 virtual成員函數會被編譯器放入虛函數表中 存在虛函數時,每個對象

C# Winform實現捕獲窗體最小化、最大化、關閉按鈕事件的方法

comm c# 基於 prot void 地址 tp服務器 plugin ant 本文實例講述了C# Winform實現捕獲窗體最小化、最大化、關閉按鈕事件的方法,主要是通過重寫WndProc來實現的。分享給大家供大家參考。具體方法如下: 主要功能代碼如下:const i

實現求解線性方程(矩陣、高斯消去法)------c++程序設計原理與實踐(進階篇)

ipy 類型 cat sys sca solution gaussian 拷貝 img 步驟: 其中A是一個n*n的系數方陣 向量x和b分別是未知數和常量向量: 這個系統可能有0個、1個或者無窮多個解,這取決於系數矩陣A和向量b。求解線性系統的方法有很多,這裏使用一種經典

C# Winform 用paint事件實現漸變色

win cxx vertica gpu ++ opc 顏色 分享 mvp 首先創建一個窗體Form1,進入代碼頁面,在前面添加一行代碼 using System.Drawing.Drawing2D; 引用繪圖類。 回到Form1的設計頁面,打開屬性頁面,進入事件列表,找到P

Objective-C Associated Objects 的實現原理

單獨 維護 borde 強引用 否則 高手 nag 研究 pro 我們知道,在 Objective-C 中可以通過 Category 給一個現有的類添加屬性,但是卻不能添加實例變量,這似乎成為了 Objective-C 的一個明顯短板。然而值得慶幸的是,我們可以通過 As

c++多態實現原理

c++編譯器 anim 被調用 虛指針 編譯 基類 綁定 確定調用 包括 C++的多態性用一句話概括就是:在基類的函數前加上virtual關鍵字,在派生類中重寫該函數,運行時將會根據對象的實際類型來調用相應的函數。如果對象類型是派生類,就調用派生類的函數;如果對象類型是基類

C# ConcurrentBag的實現原理

基礎 滿足 represent safe 接下來 finally 頭指針 tlist 進行 目錄 一、前言 二、ConcurrentBag類 三、 ConcurrentBag線程安全實現原理 1. ConcurrentBag的私有字段 2. 用於數據存儲的TrehadLo

漫談 C++ 的 內存堆 實現原理

當前 就是 問題 spa 設計 所在 內存 vision 分配 如果我來設計 C++ 的 內存堆 , 我會這樣設計 : 進程 首先會跟 操作系統 要 一塊大內存區域 , 我稱之為 Division , 簡稱 div 。 然後

C++函式模板及實現原理

    C++為我們提供了函式模板機制。所謂函式模板,實際上是建立一個通用函式,其函式型別和形參型別不具體指定,用一個虛擬的型別來代表。這個通用函式就稱為函式模板。     凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義

C#使用委託和事件實現釋出訂閱者模式

事件是C#中的高階概念,和js中的滑鼠點選$("tag").click,懸停$("tag").hover或css元素樣式的改變(onChanged)等事件,當事件觸發才執行我們所委託的方法。 步驟: 1、建立一個委託; 2、將建立的委託與特定事件關聯; 3、編寫C#事件處理程式; 4、利用編

C++多型呼叫實現原理(虛擬函式表詳解)

1.帶有虛擬函式的基類物件模型 我們先看段程式碼: #include<iostream> using namespace std; class B1 { public: void func1() {} int _b; }; class B2 { pub

推箱子游戲C++實現原理

通過WSAD控制箱子上下左右移動,Q退出程式。  { '*',' ','O','#','@' }分別表示牆,空白,方塊,目標地,人,可以根據自己喜歡重新設定 地圖為7行10例,可以根據自己喜歡調整地圖形式: char map[7][11] = { "**********", &

Objective-C runtime機制(6)——weak引用的底層實現原理

前言 提起弱引用,大家都知道它的作用: (1)不會新增引用計數 (2)當所引用的物件釋放後,引用者的指標自動置為nil 那麼,圍繞它背後的實現,是怎麼樣的呢?在許多公司面試時,都會問到這個問題。那麼,今天就帶大家一起分析一下weak引用是怎麼實現的,希望能夠搞清楚每一個細節。 S