C 委託例項分析 附原始碼

2022-02-12 18:38:29 字數 1557 閱讀 5899

一直都聽說c#中的委託與事件非常重要,都沒有什麼切身的體會,而這次通過做乙個winform二次開發的專案才真正感覺到了委託與事件的犀利之處。

1.c#中的事件和委託的作用?
事件代表乙個元件能夠被關注的一種訊號,委託是可以把乙個過程封裝成變數進行傳遞並且執行的物件。
2.他們之間的關係?

委託是一種型別,事件是一種成員,就相當於public int age 這個屬性中,int就是型別,age是乙個成員,public event eventhandler push;這個事件中eventhandler就是委託型別,push是事件,他是乙個成員。
事件從本質上來說是委託,不過在使用上比委託多了乙個限制:事件只能在定義事件的類內部被呼叫,而委託可以在任意方法中被呼叫(難就難在理解這句)。
我們基本上可以說:事件是委託,委託是方法指標,在呼叫委託的時候跟呼叫方法是一樣的。一般來說,這個限制正好用在封裝元件類的時候體現了封裝特性。
3.和什麼情況使用委託和事件?事件是元件中的抽象概念,同樣包括狀態和操作也是元件中的概念,對應到c#裡面就是屬性和方法。所以像控制項之類的元件都會有事件。而委託代表乙個**的執行過程,c#3.0引入linq以後,用的就非常頻繁了。

4.但是用事件的方式來呼叫的話有什麼好處?事件是一種封裝,就好像屬性會封裝字段一樣,可以把定義和實現隔離開來,給你舉個例子就是datetime實際上你看那麼多屬性,其實裡面只有乙個字段儲存時間,各種日期啊年啊屬性都是根據這個時間算出來的。事件也把內部型別為乙個委託的字段封裝起來,這樣在類的外部就只能使用事件來註冊或者登出事件關注,而不能引發事件。

例項:我們要達到這樣的效果:

就是點選form3中的數字選框時使form1中的文字框聯動

那麼可以使用委託來完成:

第一步:在form3.cs中定義委託與事件:

//定義帶引數的委託與兩個事件

//這是委託與事件的第一步

public delegate void form2handle(string s);

public event form2handle changed;

第二步:在form1.cs中將方法註冊到委託上:

//改變值的事件

private void changed(string s)

private void button2_click(object sender, eventargs e)

第三步:在form3.cs中使用委託:

//這是委託與事件的第三步

//傳值

changed(numericupdown1.value.tostring());

C 共享記憶體例項 附原始碼

原文 c 共享記憶體例項 附原始碼 網上有c 共享記憶體類,不過功能太簡單了,並且寫記憶體每次都從開頭寫。故對此進行了改進,並做了個小例子,供需要的人參考。主要改進點 通過利用共享記憶體的一部分空間 以下稱為 資料資訊區 來儲存當前記憶體中儲存的資料資訊 count和length或者新增其他資訊 完...

小波分析(附原始碼)

前幾天深受小波的毒害,狠狠看了幾天,算是有點成果。然後後面附上db2小波的解構與重構的matlab原始碼。首先要把傅利葉給弄懂了,傅利葉變換,是把時域的訊號,寫成了基為不同頻率的三角函式的形式,然後,以三角函式的頻率和幅值分別為x軸y軸建立頻譜。說來說去,傅立 葉就是以三角函式為基的,而且這些基是兩...

CAS詳解附原始碼

cas 也就是compareandswap 比較並交換,主要為了解決多執行緒下的原子性,大體思想就是在更新前,進行比較,舉個例子atomicinteger 下的compareandset expect,update expect 為期望值也就是未更新的值,update是如果期望值相同則更新的值。首先...