• 委托


    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace ConsoleApplication1
    {
    class Program
    {
    static void Main(string[] args)
    {
    // 创建一个委托实例,封装C类的静态方法M1
    MyDelegate d1 = new MyDelegate(C.M1);
    d1("D1"); // M1
    // 创建一个委托实例,封装C类的静态方法M2
    MyDelegate d2 = new MyDelegate(C.M2);
    d2("D2"); // M2
    // 创建一个委托实例,封装C类的实例方法M3
    MyDelegate d3 = new MyDelegate(new C().M3);
    d3("D3"); // M3
    // 从一个委托d3创建一个委托实例
    MyDelegate d4 = new MyDelegate(d3);
    d4("D4"); // M3
    // 组合两个委托
    MyDelegate d5 = d1 + d2;
    d5 += d3;
    d5("D5"); // M1,M2,M3
    // 从组合委托中删除d3
    MyDelegate d6 = d5 - d3;
    d6("D6"); // M1,M2
    d6 -= d3; // 虽然d6调用列表中已经没有d3了,但这样只是不可能的移除没有错误发生
    d6("D6"); // M1,M2
    d6 -= d6;
    //d6("D6"); 此时d6的调用列表为空,d6为null,所以引发System.NullReferenceException
    MyDelegate d7 = new MyDelegate(C1.P1);
    d7("D7"); // C1.P1
    MyDelegate d8 = new MyDelegate(new C2().P1);
    d8("D8"); // C2.P1
    }
    }
    // 声明一个委托MyDelegate
    public delegate void MyDelegate(string str);
    public class C
    {
    public static void M1(string str)
    {
    Console.WriteLine("From:C.M1: {0}", str);
    }
    public static void M2(string str)
    {
    Console.WriteLine("From:C.M2: {0}", str);
    }
    public void M3(string str)
    {
    Console.WriteLine("From:C.M3: {0}", str);
    }
    }
    public class C1
    {
    public static void P1(string str)
    {
    Console.WriteLine("From:C1.P1: {0}", str);
    }
    }
    public class C2
    {
    public void P1(string str)
    {
    Console.WriteLine("From:C2.P1: {0}", str);
    }
    }
    }
  • 相关阅读:
    php字符串截取
    Linux配置网络
    Linux FTP服务
    linux复习一
    解决phpcms V9整合discuz! X3.0后,在phpcms新注册用户需要在discuz激活的问题
    Discuz整合ECShop同步登出的问题解决
    Validator表单验证类
    JAVA学习之疯狂JAVA讲义知识分享
    Android中View绘制流程以及invalidate()等相关方法分析
    Android View的生命周期详解
  • 原文地址:https://www.cnblogs.com/YzpJason/p/6486877.html
Copyright © 2020-2023  润新知