欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

.NET/C#使用反射注冊事件的案例-創(chuàng)新互聯

這篇文章主要介紹了.NET/C#使用反射注冊事件的案例,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

余杭ssl適用于網站、小程序/APP、API接口等需要進行數據傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

不使用反射


例如,我們希望反射的類型是這樣的:

public class Walterlv
{
 public event EventHandler BlogPublished;
}

那么只需要使用如下代碼即可完成事件的注冊:

var walterlv = new Walterlv();
walterlv += Walterlv_BlogPublished;
public void Walterlv_BlogPublished(object sender, EventHandler handler)
{
}

使用反射


而如果使用反射,則是:

var walterlv = new Walterlv();
var eventInfo = typeof(Walterlv).GetEvent(nameof(BlogPublished));
var handler = new EventHandler(Walterlv_BlogPublished);
eventInfo.AddEventHandler(walterlv, handler);

當然,實際使用的時候,如果能訪問到 Walterlv 類型,當然也不會去用到反射,所以通常情況是這樣的:

public void AddHandler<T>(T instance, string eventName, EventHandler handler)
{
 var eventInfo = instance.GetType().GetEvent(eventName);
 eventInfo.AddEventHandler(instance, handler);
}

安全地使用反射


雖然以上方式使用了反射成功注冊了事件,但實際上我們的參數中傳入了一個特定類型的委托 EventHandler。實際上事件的委托種類非常多。

在委托中,即便簽名完全相同,也不是同一個委托類型。如果傳入的參數類型改為EventHandler<EventArgs> ,或者 BlogPublished 事件的類型改為 EventHandler<EventHandler>,雖然實際上這兩個委托的簽名是兼容的,但其委托類型不同,依然是不能互相轉換的。你會在運行時遇到一下異常:

.NET/C#使用反射注冊事件的案例
▲ 委托無法轉換

所以我們必須有一些更安全的方式來注冊事件。

正常情況下,我們轉換一個簽名兼容的委托是使用構造函數:

public EventHandler ConvertDelegate(EventHandler<EventArgs> handler)
{
 return new EventHandler(handler);
}

那么在反射中,我們需要使用 Delegate.CreateDelegate 創(chuàng)建指定類型的委托。

public void AddHandler<T>(T instance, string eventName)
{
 var eventInfo = instance.GetType().GetEvent(eventName);
 var methodInfo = GetType().GetMethod(nameof(Walterlv_BlogPublished));
 var @delegate = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, methodInfo);
 eventInfo.AddEventHandler(instance, @delegate);
}

public void Walterlv_BlogPublished(object sender, EventHandler handler)
{
}

這里,Delegate.CreateDelegate的作用就是執(zhí)行委托類型的轉換。我在 .NET Core/Framework 創(chuàng)建委托以大幅度提高反射調用的性能 中也提到過這個方法。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“.NET/C#使用反射注冊事件的案例”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯網站建設公司,,關注創(chuàng)新互聯行業(yè)資訊頻道,更多相關知識等著你來學習!

當前名稱:.NET/C#使用反射注冊事件的案例-創(chuàng)新互聯
URL鏈接:http://aaarwkj.com/article24/dohoce.html

成都網站建設公司_創(chuàng)新互聯,為您提供網站營銷、網站設計公司標簽優(yōu)化、營銷型網站建設、手機網站建設、關鍵詞優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都seo排名網站優(yōu)化
久久99久久久久久精品| 男女真人啪啪视频免费| 丰满肥臀熟女高清区二区| 欧美黑人在线一区二区| 日本女同一区二区高清| 中文字幕日本精品人妻在线| 国产又粗又猛又爽黄老大爷| 亚洲一区二区三区久久伊人| 国产成+人+综合+亚洲专区| 人成在线免费视频网站| 亚洲天堂日韩欧美在线一区| 精品中文人妻中文字幕| 国产精品毛片视频一区二区| 亚洲国产日韩伦中文字幕| 91人妻互换一区二区| 国产精品欧美一区二区视频| 一区二区三区日韩欧美在线 | 丰满人妻毛片一区二区三区| 色日韩在线观看视频| 自拍偷拍欧美日韩第一页| 在线看黄视频网站永久免费| 国产看片色网站亚洲av| 日本中文字幕区二区三区电影| 日本午夜视频在线观看| 精品视频中文字幕天码| 日本少妇入口一区二区| 午夜少妇伦理一区二区| 日韩在线欧美在线一区二区| 欧美一区二区日韩国产| 99人妻精品一区二区| 亚洲一区精品中文字幕| 免费一区二区三区精品| 国内一级黄色片免费观看| 一二区中文字幕在线观看| 亚洲人妻不卡一区二区| 亚洲一区欧美二区日韩| 亚洲成av人在线观看福利| 欧美日韩精品免费在线观看| 国产丝袜美女一区二区| 亚洲成人高清在线视频| 午夜香蕉av一区二区三区|