程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> EventsHelper委托觸發類

EventsHelper委托觸發類

編輯:C#入門知識

  • 在我們使用事件的時候常常會這樣寫:         public event EventHandler ChangedEvent;
            private void OnChangedEvent()
            {
                if (ChangedEvent != null)
                {
                    ChangedEvent(this, EventArgs.Empty);
                }
            }
            private void OnChangeEventAsync()
            {
                if (ChangedEvent != null)
                {
                    ChangedEvent.BeginInvoke(this, EventArgs.Empty, null, null);
                }
            }
  • 判斷事件是否有訂閱,觸發事件等,是經常重復寫的部分,其實我們可以把他們封裝起來。
  1. 創建一個EventsHelper靜態類,首先完成同步操作:創建以下方法:         // 私有檢查參數函數
            private static bool CheckArguments(Delegate del, params object[] args)
            {
                if (del == null) { return false; }
                if (args.Length > 7)
                {
                    throw new ArgumentOutOfRangeException("參數過多");
                }
                return true;
            }
            // 委托觸發函數
            private static void Fire(Delegate del, params object[] args)
            {
                foreach (var item in del.GetInvocationList())
                {
                    try
                    {
                        item.DynamicInvoke(args);
                    }
                    catch { }
                }
            }
            //非類型安全委托觸發函數
            public static void UnsafeFire(Delegate del, params object[] args)
            {
                if (CheckArguments(del, args))
                {
                    Fire(del, args);
                }
            }
  2. 由於UnsafeFire()方法並沒有檢查參數類型,所以並不能保證類型安全,於是我們創建一些通用的

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