C 每天進步一點 事件

2022-01-20 16:38:10 字數 1475 閱讀 9185

事件:如果型別定義了事件成員,那麼型別就可以通知其他物件發生了特定的事情。例如,button類提供了乙個名為click的事件。應用程式中的乙個或者多個物件可能想接收關於這個事件的通知,以便在button被點選後採取操作。

下面我們利用乙個例子來加深我們對事件的理解:假定現在要設計乙個電子郵件應用程式,電子郵件到達時,使用者可能希望將該郵件**給傳真機或其他裝置。構建這個應用程式時,先設計乙個mailmanager的型別,他負責接收傳入的電子郵件,mailmanager型別公布乙個newmail的事件。其他型別,如fax和pager物件可登記對它們對這個事件的關注。

下面上**:

第一步:定義型別來容納所有需要傳送給事件通知接收者的附加資訊

internal class newmaileventargs : eventargs  

public string from}

public string to}

public string subject}

}

注:eventargs只是乙個讓其他型別繼承的基型別。許多事件都沒有附加的資訊要傳遞,但在我們的場景中需要傳遞郵件資訊,就構造newmaileventargs。

第二步:定義事件成員

internal class mailmanager

注:newmail是這個事件的名稱。事件成員的型別是eventhandler,所以方法原型必須具有以下形式:

void methodname(object sender,newmaileventargs e);

第三步:定義負責引發事件的方法來通知事件的登記物件

internal class mailmanager

}

第四步:定義方法將輸入轉化為期望事件

internal class mailmanager

}

設計偵聽事件型別,下面我們使用fax型別來使用事件,上**

internal sealed class fax

//新的電子郵件到達時,mailmanager將呼叫這個方法

private void faxmsg(object sender,newmaileventargs e)

//執行這個方法,fax物件將向newmail事件登出自己對它的關注

public void unregister(mailmanager mm)

}

注:c#編譯器會將+=操作符翻譯成以下**來新增物件對事件的關注:

mm.add_newmail(new eventhandler(this.faxmsg));

這樣我們的例子就完成了,當有新的郵件收到時就會觸發對郵件類事件關注的所有方法,即例子中的fax中的faxmsg方法。例子需要對大家理解事件有所幫助。

每天進步一點 linux vi

1 今天 在乙個 大log 裡查詢 末尾 含有 outofmemoryerror 的錯誤日誌,又學習了一下 vi step1 vi log step2 outofmemoryerror step3 按回車 step4 按 n 或者 n 來查詢。注 以上的step2 也可以 outofmemoryer...

c 每天進步一點點

1.派生類虛函式呼叫基類版本時,必須顯式使用作用域操作符。如果派生類忽略了這樣做,則函式呼叫會在執行時確定並且將是乙個自身呼叫,從而導致 無窮遞迴。2.子類若沒定義某方法而父類定義了,則果斷呼叫父類的方法 3.虛函式是執行時動態繫結呼叫的方法。4.基類子類的this指標相同 也即父類和子類共同占用父...

每天進步一點點

很多朋友總喜歡問 成功靠什麼?其實,成功很難單一的歸納為靠什麼條件,如果一定要回答,只能從某種意義上說 很多人的成功就是靠他們每天比別人 多做一點點 正如古人有云 業精於勤,荒於嬉。這裡所說的勤,也就是比別人多做一點點,即付出多一點的勞動和努力。不要小看這一點點,又如古語說 集腋成裘,積沙成丘。如果...