C 中的委託和事件 4

2021-05-05 05:24:16 字數 2136 閱讀 1574

我們之前已經對委託和事件介紹很多了,現在寫**應該很容易了,現在在這裡直接給出**,並在注釋中加以說明。

using

system;

using system.collections.generic;

using system.text;

namespace delegate }}

}}// 警報器

public

class

alarm 度了:", param);}}

// 顯示器

public

class

display 度。", param);}}

class

program }}

輸出為:

alarm:嘀嘀嘀,水已經 96 度了:

alarm:嘀嘀嘀,水已經 96 度了:

display:水快燒開了,當前溫度:96度。

// 省略...

儘管上面的範例很好地完成了我們想要完成的工作,但是我們不僅疑惑:為什麼.net framework 中的事件模型和上面的不同?為什麼有很多的eventargs引數?

在回答上面的問題之前,我們先搞懂 .net framework的編碼規範:

再做一下說明:

委託宣告原型中的object型別的引數代表了subject,也就是監視物件,在本例中是 heater(熱水器)。**函式(比如alarm的makealert)可以通過它訪問觸發事件的物件(heater)。

eventargs 物件包含了observer所感興趣的資料,在本例中是temperature。

上面這些其實不僅僅是為了編碼規範而已,這樣也使得程式有更大的靈活性。比如說,如果我們不光想獲得熱水器的溫度,還想在observer端(警報器或者顯示器)方法中獲得它的生產日期、型號、**,那麼委託和方法的宣告都會變得很麻煩,而如果我們將熱水器的引用傳給警報器的方法,就可以在方法中直接訪問熱水器了。

現在我們改寫之前的範例,讓它符合 .net framework 的規範:

using

system;

using system.collections.generic;

using system.text;

namespace delegate

}// 可以供繼承自 heater 的類重寫,以便繼承類拒絕其他物件對它的監視

protected

virtual

void onboiled(boiledeventargs e)

}// 燒水。

public

void boilwater() }}

}// 警報器

public

class

alarm - : ", heater.area, heater.type);

console.writeline("alarm: 嘀嘀嘀,水已經 度了:", e.temperature);

console.writeline();}}

// 顯示器

public

class

display - : ", heater.area, heater.type);

console.writeline("display:水快燒開了,當前溫度:度。", e.temperature);

console.writeline();}}

class

program }}

輸出為:

alarm:china xian - realfire 001:

alarm: 嘀嘀嘀,水已經 96 度了:

alarm:china xian - realfire 001:

alarm: 嘀嘀嘀,水已經 96 度了:

alarm:china xian - realfire 001:

alarm: 嘀嘀嘀,水已經 96 度了:

display:china xian - realfire 001:

display:水快燒開了,當前溫度:96度。

// 省略 ...

在第二個稍微複雜點的熱水器的範例中,我向大家簡要介紹了 observer設計模式,並通過實現這個範例完成了該模式,隨後講述了.net framework中委託、事件的實現方式。

希望這篇文章能給你帶來幫助。

C 中的委託和事件

委託類似於c 中的函式指標,c 中的委託申明如下 delegate void mydelegate 只要該委託執行的方法與委託申明的簽名一致,就能呼叫委託來執行該方法,例如在本例中,有個方法為 void method 那麼就可以如下呼叫 mydelegate delegate new mydeleg...

C 中的委託和事件

委託 和 事件在 net framework中的應用非常廣泛,然而,較好地理解委託和事件對很多接觸c 時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委託和事件就覺得心裡憋得慌,渾身不自在。本文中,我將通過兩個範例由淺入深地講述什麼是委託 為什麼...

C 中的委託和事件

較好地理解委託和事件對很多接觸c 時間不長的人來說並不容易。它們就像是一道檻兒,過了這個檻的人,覺得真是太容易了,下面的例子如果能很好的理解了,那麼基本的委託和事件就基本有所了解了!namespace 委託和事件 方法三委託的定義 public delegate void greetdelegate...