zoukankan      html  css  js  c++  java
  • 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中移出委托是无效操作

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

  • 相关阅读:
    ReactJs入门
    Studio-Class Diagram
    Visual Studio-Sequence Diagram
    架构、职责、数据一致性
    Microsoft Build 2015
    Net下无敌的ORM
    SpringMVC1
    插件式Web框架
    ASP.NET的CMS
    Android Drawable绘图学习笔记(转)
  • 原文地址:https://www.cnblogs.com/miaoying/p/4833300.html
Copyright © 2011-2022 走看看