• c# 了解委托


    public delegate void aHandler(string text);
    
        public class A1
        {
            public void Print(string txt)
            {
                Console.WriteLine(txt + "我是1号");
            }
        }
    
        public class A2
        {
            public void Print(string txt)
            {
                Console.WriteLine(txt + "我是2号");
            }
        }
    
        class B1
        {
            public static void StaticPrint(string txt)
            {
                Console.WriteLine(txt + "我是3号");
            }
    
            public static void Main()
            {
                string my = "委托链";
                A1 a1 = new A1();
                A2 a2 = new A2();
                //创建委托实例
                aHandler ah1 = new aHandler(a1.Print);
                aHandler ah2 = new aHandler(a2.Print);
                aHandler ah3 = new aHandler(StaticPrint);
    
                Console.WriteLine("委托实例ah1的打印结果:");
                ah1(my);
    
                Console.WriteLine("委托实例ah2的打印结果:");
                ah2(my);
    
                Console.WriteLine("委托实例ah1+ah2的打印结果:");
                aHandler ah = ah1 + ah2;
                ah(my);
    
                Console.WriteLine("委托实例ah1+ah2+ah3的打印结果:");
                 ah += ah3;
                ah(my);
    
                Console.WriteLine("委托实例ah1+ah3的打印结果:");
                ah -= ah2;
                ah(my);
    
                Console.WriteLine("委托实例ah3的打印结果:");
                ah -= ah1;
                ah(my);
    
                Console.WriteLine("试图调用null委托会引发异常");
                try
                {
                    ah-=ah3;
                    ah(my);
                }
                catch(NullReferenceException ex) //尝试取消引用空引用对象时引发的异常
                {
                    Console.WriteLine(ex.Message);
                }
    
                Console.WriteLine("试图从null中移出委托是无效操作");
                try
                {
                    ah -=ah3;
                }
                catch(NullReferenceException ex)
                {
                    Console.WriteLine(ex.Message);
                }
    
                Console.Read();
            }
        }

    运行结果:

    委托实例ah1的打印结果:
    委托链我是1号
    委托实例ah2的打印结果:
    委托链我是2号
    委托实例ah1+ah2的打印结果:
    委托链我是1号
    委托链我是2号
    委托实例ah1+ah2+ah3的打印结果:
    委托链我是1号
    委托链我是2号
    委托链我是3号
    委托实例ah1+ah3的打印结果:
    委托链我是1号
    委托链我是3号
    委托实例ah3的打印结果:
    委托链我是3号
    试图调用null委托会引发异常
    未将对象引用设置到对象的实例。
    试图从null中移出委托是无效操作

    委托是对方法或方法列表的引用,可以说是一种引用类型。委托分为三步:声明、实例化、调用。

  • 相关阅读:
    mybatis动态查询,模糊查询
    Python 列表
    异步加载实现点赞功能($.load 出现post不支持)
    shiro多账号登录(用户名,手机号,邮箱)
    spring data jpa 级联操作的时候注意事项
    semantic UI 点击按钮自动提交表单原因
    上线日期
    有关弱类型意识、DOM、动态语言与函数式编程
    视频项目时长的存储和程序设计方案---单例模式节省内存空间以及自定义注解
    项目中整合第三方插件与SpringMVC数据格式化关于ip地址
  • 原文地址:https://www.cnblogs.com/miaoying/p/4833300.html
Copyright © 2020-2023  润新知