zoukankan      html  css  js  c++  java
  • delegate--委托

    delegate--委托  (可以把委托看成用来执行方法的一个东西)

    eg:

    namespace delegateTest
    {
    delegate double MathsOp(double x);
    class Program
    {
    public class MyDelegate
    {
    public static double MultiplyBy2(double x)
    {
    return x * 2;
    }
    }

    [STAThread]//[STAThread] attribute指示应用程序的 COM 线程模型是单线程单元 若为多线程单元则是 [MTAThread]

    static void Main(string[] args)
    {
    MathsOp operation = new MathsOp(MyDelegate.MultiplyBy2);

    double x = 1.23;

    double result = operation(x);

    Console.WriteLine("{0}multiply by 2 is {1}", x, result);

    Console.Read();

    }
    }
    }

      

    多路广播委托
       前面使用的委托只包含一个方法调用。调用委托的次数与调用方法的次数相同。
    如果要调用多个方法,就需要多次显示调用这个委托。其实委托也可以包含多个方法,
    这种委托就是多路广播委托。我们可以通过+=来向委托添加调用方法,
    也可以用-=删除其中的调用方法。如:

    namespace delegateTest
    {
    public class MyDelegate
    {
    public static void MultiplyBy2(double value)
    {
    double result = value * 2;
    Console.WriteLine("Multiplying by 2 :{0}gives{1}", value, result);
    }
    public static void Squre(double value)
    {
    double result = value * value;
    Console.WriteLine("Squaring:{0}gives{1}", value, result);
    }
    }
    delegate void MathsOp(double x);

    class Program
    {
    [STAThread]
    static void Main(string[] args)
    {

    //MyDelegate.MultiplyBy2作为函数参数
    MathsOp operation = new MathsOp(MyDelegate.MultiplyBy2);
    operation += new MathsOp(MyDelegate.Squre);
    double x = 1.23;
    operation(x);

    operation -= new MathsOp(MyDelegate.MultiplyBy2);
    operation(x);
    }
    }
    }

    为什么要用委托
      使用委托使程序员可以将方法引用封装在委托对象内。
    然后可以将该委托对象传递给可调用所引用方法的代码,
    而不必在编译时知道将调用哪个方法。
    与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
    我爱学习,学习使我快乐。
  • 相关阅读:
    hdu 1104 数论+bfs
    hdu 1019 最小公倍数
    hdu 1005 数论 循环
    山东省第三届acm
    hdu 1576
    浏览器支持
    FormData
    获取APP图片资源
    链接转标签
    bug20170125
  • 原文地址:https://www.cnblogs.com/kerven/p/6523467.html
Copyright © 2011-2022 走看看