C 的委託及事件 貓叫人醒老鼠跑

2022-02-07 22:15:40 字數 1332 閱讀 2357

原文:

昨天進行了一下培訓,講解了一下委託跟事件的應用,說實話這個東西聽起來還是一頭霧水,雖然學會怎麼用,但是還沒搞明白需要在什麼時候用到這個,後來我們經理給我舉了個例子,讓我做乙個經典的委託和事件的例子,就是貓叫人醒老鼠跑。

首先很簡單,需要定義貓,人跟老鼠三個類,分別命名為cat,people,mouse,在這裡我還寫了乙個介面,裡面寫了乙個void action(),用以實現多型,people和mouse兩個類繼承了這個介面並實現,然後定義乙個委託public delegate void scream(), 返回型別為void,然後在cat類中定義乙個事件public event scream scream,用來接下裡的事件繫結。接下來要寫乙個虛擬類,來作為乙個觀察者,而cat類是作為乙個被觀察者,當cat類中的方法被呼叫以後,觸發繫結 在事件裡面的方法,這裡我寫了乙個虛類來扮演觀察者的角色,cat類做為被觀察者,當cat類被呼叫呢,觀察者告訴另外兩個類cat類已經被呼叫,然後這 兩個類各自實現相應的方法,也就是說觀察者觀察到貓叫了一聲以後告訴人和老鼠,人就醒過來,而老鼠就開始跑,這就是同一件事情引發的不同角色的不同動作, 而虛類的建構函式方法來繫結虛方法action()。虛類的**如下:

public abstract class observer : iscream

public observer(cat cat)

public abstract void action();

}人跟老鼠的類繼承自這個虛類,通過重寫虛方法action來達到實現多型的效果,然後通過base來呼叫父類的建構函式,人跟老鼠類的**如下:

class person:observer

public person(cat cat) : base(cat)

}  class mouse : observer

public mouse(cat cat) : base(cat)

}這樣定義好了以後,最後只要呼叫cat類的方法就能實現預期效果,整體**如下:

public delegate void scream();

public class cat

}public abstract class observer : iscream

public observer(cat cat)

public abstract void action();

}class mouse : observer

public mouse(cat cat) : base(cat)

}class person:observer

public person(cat cat) : base(cat)

}   

class program

}

C 委託及事件委託的初步理解

委託的宣告 public delegate void mydelegate string str 委託是一種特殊的型別 class 用途是來實現對一種方法的封裝。在某種事件發生時,自動呼叫該方法。好處顯然易見,它使使用者可以自定義自己的方法實現,通過封裝,clr會在相應事件激發時呼叫你定義的方法,實...

對C 委託及事件委託的理解

委託的宣告 public delegate void mydelegate string str 注1.委託的定義和方法的定義類似,只是在前面加了乙個delegate,但委託不是方法,它是一種型別。是一種特殊的型別,看成是一種新的物件型別比較好理解。用於對與該委託有相 同簽名的方法呼叫。2.委託相當...

C 委託及事件委託的初步理解

委託的宣告 public delegate void mydelegate string str 委託是一種特殊的型別 class 用途是來實現對一種方法的封裝。在某種事件發生時,自動呼叫該方法。好處顯然易見,它使使用者可以自定義自己的方法實現,通過封裝,clr會在相應事件激發時呼叫你定義的方法,實...