delegate void handler();
class incrementer
}class dozens
public dozens(incrementer incrementer)
void incrementdozenscount()
}class program
",dozenscounter.dozenscount);
}輸出結果為:
number of dozens = 8
標準事件的用法:
關於標準事件的用法需要注意以下幾點:
□ 第乙個引數用來儲存觸發事件的物件的引用。由於object型別的,所以可以匹配任何型別的例項;
□ 第二個引數用來儲存狀態資訊,指明什麼型別適用於該應用程式;
□ 返回型別是void。
public delegate void eventhandler(object sender,eventargs e);
eventhandler委託型別的第二個引數是eventargs類的物件,它宣告在system命名空間中。你可能會想,既然第二個引數用於傳遞資料,eventargsl類的物件應該可以儲存些型別的資料。但是,很顯然,你可能錯了。
□ eventargs設計為不能傳遞任何資料。它用於不需要傳遞資料的事件處理程式——通常會被忽略。
□ 如果你希望傳遞資料,必須宣告乙個派生自eventargs的類,使用合適的字段來儲存需要傳遞的資料。
儘管eventargs類實際上並不傳遞資料,但它是使用eventhandler委託模式的重要部分。不管引數使用的實際型別是什麼,object類和eventargs總是基類。這樣eventargs就能提供乙個對所有事件和事件處理器通用的簽名,只允許兩個引數,而不是各自不同的簽名。
現在對上面的委託進行修改:
delegate void handler();
class incrementer
}class dozens
public dozens(incrementer incrementer)
void incrementdozenscount(object source, eventargs e)
}class program
",dozenscounter.dozenscount);}}
通過改變上述事件,變為標準事件。輸出結果與上述相同。
通過拓展eventargs來傳遞資料。
delegate void handler();
public class incrementereventargs : eventargs //自定義派生子eventargs
}class incrementer}}
}class dozens
public dozens(incrementer incrementer)
void incrementdozenscount(object source, incrementereventargs e)
in ",
e.iterationcount, source.tostring());
dozenscount++;}}
class program
",dozenscounter.dozenscount);
console.read();}}
這段程式產生如下輸出,展示了被呼叫時的迭代和源物件的完全限定類名。
移除事件處理程式
class pulisher
}class subscriber
public void methodb(object o, eventargs e)
}class program
}輸出的結果為:
js 事件建立發布
建立事件.var event document.createevent event 初始化乙個點選事件,可以冒泡,無法被取消 event.initevent click true,false 設定事件監聽.elem.addeventlistener click function e false 觸發...
動態建立帶事件的控制項
類模組class1 option explicit private withevents mvarcmbtn as mandbutton public property set cmbtn byval vdata as mandbutton set mvarcmbtn vdata end prope...
C 中的事件和事件處理
c 中的事件,我覺得和mfc的訊息作用在某些方面是差不多的。這個專案中用到的需求是兩個類之間的資料互動,首先肯定是分為乙個觸發事件的類,乙個處理事件的類。1 首先需要在所有類的外部為事件定義乙個公共訪問型別的 該 為多重 所以 定義方法標識的返回為void型別。一般我們這麼定義 public voi...