委託定義一個函數簽名。它可以被用作是定義的回調函數的類型:
public class MyPageClass
{
public delegate void FirstPageCallback(string pageTitle);
// Method with a callback function
public void SomePageProcessing(FirstPageCallback fpcb, int pageNumber)
{
// Do some stuff
...
// Call the function defined in another class
fpcb("This is a title");
}
}
與適當的簽名的函數然後可以在另一個類中聲明,並且傳遞到MyPageClass對象的方法:
public class MyClientClass
{
private MyPageClass p = new MyPageClass();
private void ProcessPages()
{
// Pass DoFirstPageStuff as callback function
p.SomePageProcessing(DoFirstPageStuff, 7);
}
// This method has the signature specified by the FirstPageCallback delegate
// It will be called inside p.SomePageProcessing
private void DoFirstPageStuff(string title)
{
// Do something with the page title
...
}
}
EventHandler
代表通常用於聲明事件。你可以使用你自己的委託,但可能沒有必要。
public class MyPageClass
{
public event EventHandler FirstPageLoaded;
public void MorePageProcessing(int pageNumber)
{
// Do some stuff
...
// Call all the registered event handlers
if (FirstPageLoaded != null)
{
FirstPageLoaded(this, EventArgs.Empty);
}
}
}
包含MyPageClass的一個實例可以註冊事件處理程序的類:
public class MyClientClass
{
private MyPageClass p = new MyPageClass();
private void ProcessMorePages()
{
// Register ProcessLoadedPage as event handler
p.FirstPageLoaded += ProcessLoadedPage;
}
// This method has the same signature as the EventHandler delegate
// It will be called inside p.MorePageProcessing
private void ProcessLoadedPage(object sender, EventArgs e)
{
...
}
}
的
EventHandler
代表具有
EventArgs
參數,其不包含任何數據。在事件聲明
public class FirstPageEventArgs: EventArgs
{
public int PageNumber;
public string Title;
public FirstPageEventArgs(int pageNumber, string title)
{
PageNumber = pageNumber;
Title = title;
}
}
,包括它與普通版本的EventHandler
:如果您的事件處理程序需要更多的數據,可以從EventArgs
派生類
public event EventHandler<FirstPageEventArgs> FirstPageLoaded;
事件處理程序將被觸發這種方式:
if (FirstPageLoaded != null)
{
FirstPageLoaded(this, new FirstPageEventArgs(currentPageNumber, "My title"));
}
並用適當的參數來定義:
private void ProcessLoadedPage(object sender, FirstPageEventArgs e)
{
// Use the values of the derived EventArgs argument
int pageNumber = e.PageNumber;
string title = e.Title;
...
}
你在用什麼事件? lnkprev_Click本身就是一個代表 –
只需刪除'公共事件PagePrevHandler PagePrev;'你就可以工作(編譯)代碼。當你需要一個PagePrev事件時,問一個更集中的問題。 –