程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 從反射看委托與事件 委托真的是一個類

從反射看委托與事件 委托真的是一個類

編輯:關於.NET

關於委托與事件,網上介紹得非常之多,在此不再贅述,本人最近需要搗鼓一些委托,因而對委托進行一 定的尋根究底,故用反射把委托的成員揪出來,且看如下代碼:

delegate void DelegateDemo();
        static event DelegateDemo delHandle;
        static void Main()
        {
            delHandle += new DelegateDemo(MyDelegate_delHandle);
            MemberInfo[] mis = delHandle.GetType().GetMembers();
            foreach (var item in mis)
            {
                Console.WriteLine(item.Name+"  " + item.ToString());
            }
        }
    
        static void MyDelegate_delHandle()
        {
            throw new NotImplementedException();
        }

貼出來才發現是獲取事件的類型,當然用此與委托進行對比的話只需要將 delHandle.GetType()改為typeof(DelegateDemo),對比下會發現什麼呢?好奇的童鞋自行試驗了哈。

上 述輸出也許看的不是很直觀,我們可以斷點進去監視,看下圖,顯示得非常直觀,可以看到其內部公共的成員 方法和屬性了啊。

另外說一點我的個人看法,委托是一個類,那麼事件是什麼呢?我認為事件就是類的一個對象, 看這個反射獲取類型的方式與平常反射一個類反射一個對象就是完全一致的呵。

關於委托,添加一點 ,這是以前未曾注意的:委托協變——支持返回值協變;逆變——支持參數, 但傳參仍然以委托定義的參數為 准

好了,以上是反射方式分析委托和事件,當然還有更底層的分析

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved