C#委托多播

 class Program
    {

        static void Main(string[] args)
        {

            Action<double> ops = MathOperations.Mutiply;

            ops += MathOperations.Squre;

            ops.Invoke(3);

        }

    }
 public class MathOperations
    {
        public static void Mutiply(double value)
        {
            Console.WriteLine("result:{0}", value * 2);
        }

        public static void Squre(double value)
        {
            Console.WriteLine("result:{0}", Math.Pow(value, 2));
        }
    }

改进的调用方式,防止多播中的末一个发生异常

 class Program
    {

        static void Main(string[] args)
        {

            Action<double> ops = MathOperations.Mutiply;

            ops += MathOperations.Squre;

            //ops.Invoke(3);

            Delegate[] delegates = ops.GetInvocationList();

            foreach (Action<double> d in delegates)
            {
                try
                {
                    d(3);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

            }
        }

    }
时间: 2024-10-08 23:59:26

C#委托多播的相关文章

C#多播委托/多播代理

定义:委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针.理解委托的一种方式可以把委托的作用当作是给方法签名指定名称.委托的定义类似于方法的定义,但没有方法体,定义的委托名前要加上关键字delegate. 因为定义委托基本上是定义一个新类,所以可以在定义类的任何地方定义委托,既可以在另一个类的内部定义委托,也可以在所有类的外部定义委托,还可以在命名空间中把委托定义为顶层对象.根据定义的可见性,可以在委托定义上添加一般的访问修饰符:public.private和protected

多播委托(from www.sysoft.cc)

一个委托类型实列不仅可以绑定一个方法,其实可以实现多个方法的绑定,即多播委托,或委托链.如下: namespace 多播委托 {//定义具有反回值无参数的委托类型变量 public delegate int weito(); class Program { static void Main(string[] args) {//建立对应委托类型实列,并指定方法,通过增加方式,实现委托多播. //委托执行一般按照增加方法的顺序进行. weito kk = new weito(M1); kk += M

C# 泛型委托和多播委托

泛型委托的定义 泛型委托的作用可以使程序定义一个委托,满足多个需求,如需要定义一个int类型参数的委托和定义一个string类型类型的委托时,直接使用泛型,就可以减少多次定义委托 泛型委托定义时候只需要再方法名后加:<类型在方法中的名字> 类型可以是多个,多个类型之间用 ”,“ 逗号隔开 // 定义泛型委托 delegate void MyDelegate<T>(T str); // 定义返回值为泛型的委托 delegate Y MyDelegate1<T, Y>(T

委托和事件

一.委托:是一个能够引用方法的对象.创建委托时实际是创建一个方法引用的对象,创建的引用对象能够调用方法. 委托调用可以调用不同的方法,只需改变方法的引用即可.即委托调用方法是运行时确定,而非编译时确定. 就像声名一个object实例一样,声名的只是一个占位符,具体指向哪个对象在运行时可以动态指定.在委托中指定方法有限制:返回值,参数类型要相同. 委托声名:delegate ret-type delegatename(parameter-list) delegate 关键字声名委托 ret-typ

委托 (代码复习)

1 namespace DelegateDemo 2 { 3 //声明委托 4 public delegate void MyDel(); 5 //声明带参的委托 6 public delegate void MyDelAdd(int num1, int num2); 7 //声明带有返值的委托 8 public delegate string MyDelStrUp(string s); 9 10 //声明委托用于演示匿名方法 11 public delegate string ProcessS

C#_委托Delegate

委托 C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变. 委托(Delegate)特别用于实现事件和回调方法.所有的委托(Delegate)都派生自 System.Delegate 类. 声明委托(Delegate) 委托声明决定了可由该委托引用的方法.委托可指向一个与其具有相同标签的方法.   1 delegate 函数返回类型 委托名 (<方法参数列表>); 实例化委托(Dele

《C#高级编程》读书笔记(五):委托

1,委托的概念 当需要把方法传递给其他方法时,需要调用委托.委托只是一种特殊类型的对象,其特殊之处在于,我们之前定义的所有对象都包含数据,而委托包含的只是一个或多个方法的地址. 委托的类型安全性非常高.在定义委托时,必须给出它所表示的方法的签名和返回类型等全部细节. 2,使用委托的场景 给一个方法传递的参数也是方法,而且编译时不知道第二个方法是什么,这个信息只能在运行时得到,所以把第二个方法作为参数传递给第一个方法. 3,简单的例子 public static string StrAddTwo(

委托详解

委托 为什么要使用委托: 我们习惯性的把数据当做参数传递给方法,如果给方法传递一个方法呢?但是往往有时候我们要给一个方法传递另一个方法.更麻烦的是,有时候我们并不知道程序在编译时才知道应该传递哪一个方法.但是.NET Framework语法是不允许直接调用方法的,必须把方法的细节封装在一种新类型的对象中,这个新类型就是委托.关键字是delegate.委托是一个特殊的类型对象,其特殊之处在于,我们以前定义的对象包含的是数据,但是委托保护哈韩的只是一个方法或多个方法的地址. 与委托相关的类与关键字(

C#之委托、事件、lambda

委托 委托是什么? 委托是一种封装方法的特殊机制,可以帮助程序员更灵活的调用相应的方法. 委托的使用 委托是一个可以引用方法的对象,所以在创建委托时,实际创建的是一个存储方法引用的对象.在程序运行期间,同一个委托能够用于调用不同的方法,只要改变它引用的方法就可以.所以,委托调用的方法不是在编译时确定的,而是在运行的时候确定的. 委托的声明 <span style="font-family:Microsoft YaHei;font-size:18px;">public del