假如我定義了這樣乙個委託:
public delegate void feedback(object sender,eventargs e);
注意,如果沒有學習過委託,看這句**好象只是乙個函式,其實這句話真正的用意是定義乙個委託型別,如果你了解他在.net框架裡面的具體形式,完全可以這樣寫:
public class feedback:system.multicastdelagate{
//構造器
public feedback(object sender,eventargs e);
//函式原型
oublic void virtual invoke(object sender,eventargs e);
//非同步呼叫
public virtual iasyncresult beginivoke(object sender,eventargs e);
public virtual void endivoke(iasyncresult result);
委託是乙個類,這點非常重要,對理解"事件是委託的乙個例項"非常重要.
可以用ilda**.exe檢視就很清楚了.只不過委託是乙個比較特殊的類,他的定義那樣寫編譯器是認識的,如果其他類那樣寫就不行.理解"事件是委託的乙個例項"這句話:
如果我寫乙個這樣乙個類:
public class a{
然後 這樣寫:a a=null; 這樣寫你絕對會認為a是a的例項,
如果我們當初定義類的時候就象上面那樣寫,然後再定義事件: public event feedback feedback; 這樣寫就會很明顯了,這裡feedback 不就相當於a,feedback就相當於a嗎? 事件的確是委託的例項.
理解"委託是**函式的簽名":這句話不難理解,如果你定義的委託是
public delegate void feedback(object sender,eventargs e); 那麼你的**函式的"樣子"也必須是這樣的.
來看事件:
定義事件:public event feedback feedback
onfeedback:這個函式主要負責通知事件的登記物件(通俗的講就是用來觸發事件):
protected virtual void onmailmsg(objcet sender,mailmsgeventargs e)
if(mailmag!=null)
mailmsg(this,e)
eventargs:這個類是給我們過載的.派生出mailmsgeventargs
這個主要是用來儲存傳送給接受者的資訊,他和委託是沒有關係的.
object sender是傳送者的一些資訊,有時候我們在按紐事件中取e.就是取傳送者的資訊.這裡的this指的就是mailmanger類本身.
if(mailmag!=null) 這句話是幹什麼的呢?對,他就是用來檢查是否有登記者,就是檢查有沒有:+=
如果你+=以後再-=就為null.
所以我們理解事件委託的時候只要清楚的知道哪個是傳送者,哪個是接收者,寫委託與事件就很簡單了.
(其實.net框架程式設計修訂版事件那張舉的傳送接受傳真和郵件的例子其實就是乙個observer模式,學習委託與事件可以和observer模式聯絡起來呵呵!)
對於「委託」的解釋摘錄(一)
委託很類似於c中的函式指標 包含對方法的引用 幫助決定在執行時呼叫哪個方法 步驟 定義委託 例項化委託 使用委託 定義委託 public delegate void delegatename 例項化委託 class testdelegates public int divfun int a,int ...
委託的無敵解釋
經常許多人問的,net中的委託以及事件處理。我拿簡單的例子說明一下,是現實中的例子 比如說乙個公司 場景 你是老闆,手下有兩個員工,小張和小王。你命令小王,如果小張玩遊戲,則小王扣去小張500元錢。這就是現實中的委託。實際上,在寫程式中,程式設計師就是老闆,小張和小王就是兩個物件。小張玩遊戲是乙個方...
對於最小二乘法的解釋
之前在 遙感原理 課上老師引用了某一位高人 記不清是誰了 對於最小二乘法的解釋。這可能是我目前接觸到的對於最小二乘法最形象的解釋了。線性方程組的解的三種狀態 無解,唯一解和多解 欠定 中學裡邊,咱們只管唯一解。但實際工作中常常遇到觀測數目多於未知數目的情況。這時,資訊量常有富餘,反而 無解 顯得很傻...