zoukankan      html  css  js  c++  java
  • 委托的一个小问题

    namespace 带返回值的委托
    {
        delegate int MyDel();
        
        public class Class1
        {
            int IntValue = 5;
            public int Add2(){IntValue+=2;return IntValue;}
            public int Add3(){IntValue+=3;return IntValue;}
            
            
            public Class1()
            {
            }
        }
        
        class Program
        {
            public static void Main(string[] args)
            {
                Class1 mc = new Class1();
                
                MyDel mDel =new MyDel(mc.Add3);
                
                语句一//Console.WriteLine("{0}",mDel());
                
                mDel += new MyDel(mc.Add2);
                
                Console.WriteLine("{0}",mDel());
                
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
            }
        }
    }
    这段代码当没有语句一的时候输出的结果是10没有任何问题。委托会返回委托列表中最后一个函数的返回值。
    当加入语句一后  我当时的想法只是想要输出委托的中间值,奇怪的事情发生的了代码居然输出的是8和13 ,我本来认为会输出8和10的。
    开始我怎么也想不明白13到底是如何来的。好吧 ,后来想明白的时候才发现是我自己脑子2掉了。
    
    原来当我执行Console.WriteLine("{0}",mDel());这个语句的时候mDel()会被执行 。这个时候是8没有任何问题 。当我执行mDel += new 
    
    MyDel(mc.Add2);委托列表中有两个函数 , 这时IntValue的值是8,当我再次执行mDel()。委托列表会再次重新执行Add3和Add2() 。8+3+2
    
    返回13
  • 相关阅读:
    [Lydsy1706月赛]大根堆
    某考试 T1 Function
    [SHOI2016] 随机序列
    某考试 T1 至危警告
    某考试 T2 yja
    bzoj1880 [Sdoi2009]Elaxia的路线
    bzoj1804 [Ioi2007]Flood 洪水
    bzoj4546 codechef XRQRS
    bzoj4547 小奇的集合
    bzoj1443 [JSOI2009]游戏Game
  • 原文地址:https://www.cnblogs.com/deosky/p/3200127.html
Copyright © 2011-2022 走看看