Esempio n. 1
0
        /// <summary>
        /// Вызвать все методы в полученной цепочке делегатов
        /// </summary>
        /// <param name="delagateChain">Цепочка делегатов</param>
        /// <param name="invokeParametr">Параметр для вызова</param>
        /// <param name="setSomeAsNull">Параметр для "обнуления" одного из делегатов в цепочке</param>
        public void GetAllmethodsInChain(TestDelagate delagateChain, int invokeParametr, bool setSomeAsNull = false)
        {
            if (delagateChain == null)
            {
                return;
            }

            var delegateArray = delagateChain.GetInvocationList();

            if (setSomeAsNull)
            {
                delegateArray[delegateArray.Length / 2] = null;
            }

            foreach (var del in delegateArray)
            {
                try
                {
                    Console.WriteLine($"\nПопытка вызвать метод {del.Method}.....\n");
                    ((TestDelagate)del).Invoke(invokeParametr);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"В {del.Method.Name} класса {del.GetType().Name} Возникло исключение {ex.Message}");
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Искусственный метод создающий цепочку делегатов и помещающий ее в поле
        /// TestDelagateField экземпляра класса
        /// </summary>
        public void SetTestDelegateAsChain()
        {
            TestDelagate testDelagate      = null;
            var          testDelegateExemp = new TestDelegateMethodClass();

            //добавление в цепочку с помощью Delegate.Combine
            testDelagate      = (TestDelagate)Delegate.Combine(testDelagate, new TestDelagate(TestDelegateMethodClass.Display));
            testDelagate     += new TestDelagate(testDelegateExemp.ShowMessage);
            testDelagate     += new TestDelagate(testDelegateExemp.GetExceptionIfValue0);
            testDelagate     += new TestDelagate(val => Console.WriteLine($"Анонимный метод  { val }"));
            testDelagate     += new TestDelagate(testDelegateExemp.RepeatShowMessage);
            TestDelagateField = testDelagate;
            //testDelagate.Invoke(val);
        }