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++中的函数指针不同,委托是面向对象,而且是类型安全的。
    我爱学习,学习使我快乐。
  • 相关阅读:
    C语言-第32课
    typeof和clamp
    C语言void*和*p的使用
    C语言二级指针和一级指针
    C语言结构体变量成员之指针变量成员的坑
    控制硬件三部曲
    C语言const char*使用
    jiffies是什么
    TPO3-1 Architecture
    相关关系|相关系数|线性关系|
  • 原文地址:https://www.cnblogs.com/kerven/p/6523467.html
Copyright © 2011-2022 走看看