• c#委托


    示例1:

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
        
    delegate void EatDelegate(String food);

        
    class Program
        {
            
    private static void zsEat(String food)
            {
                Console.WriteLine(
    "张三吃"+food);
            }

            
    private static void lsEat(String food)
            {
                Console.WriteLine(
    "李四吃"+food);
            }

            
    private static void wwEat(String food)
            {
                Console.WriteLine(
    "王五吃"+food);
            }

            
    static void Main(string[] args)
            {
                
    /*定义张三,李四,王五吃food的委托,
                 * 并为他们的委托代理他们吃food的方法.
    */
                EatDelegate zs 
    = new EatDelegate(zsEat);

                EatDelegate ls 
    = new EatDelegate(lsEat);

                EatDelegate ww 
    = new EatDelegate(wwEat);

                
    //委托链
                EatDelegate eatChain = zs + ls + ww;

                Console.WriteLine(
    "张三,李四,王五开座谈会.");

                
    //调用委托链
                eatChain("吃西瓜");

                Console.WriteLine(
    "李四出去接电话.");

                
    /*C#在委托中重载了+=和-=操作符,
                 * 使它们能够对委托链进行+,-操作
    */
                eatChain 
    -= ls;

                eatChain(
    "吃香蕉");

                Console.WriteLine(
    "李四回来了.");

                eatChain 
    += ls;

                eatChain(
    "吃桔子.");

            }
        }
    }

     委托的匿名方法:

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
        
    delegate void EatDelegate(String food);

        
    class Program
        {
            
    static void Main(string[] args)
            {
             
                
    //委托链
                EatDelegate eatChain=null;

                
    //C#2.0增加的委托的匿名方法
                eatChain += delegate(String food) { Console.WriteLine("张三吃"+food); };

                eatChain 
    += delegate(String food) { Console.WriteLine("李四吃"+food); };

                eatChain 
    += delegate(String food) { Console.WriteLine("王五吃" + food); };

                eatChain(
    "西瓜");

            }
        }
    }

     委托代理实例方法

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
        
    delegate void EatDelegate(String food);

        
    class Man
        {
            
    private string name;

            
    public Man(string name)
            {
                
    this.name = name;
            }

            
    public void Eat(string food)
            {
                Console.WriteLine(name
    +""+food);
            }
        }


        
    /*委托代理实例方法*/
        
    class Party
        {
            [STAThread]
            
    static void Main(string[] args)
            {

                Man zsObj 
    = new Man("张三");

                Man lsObj 
    = new Man("李四");

                Man wwObj 
    = new Man("王五");

                EatDelegate zs 
    = new EatDelegate(zsObj.Eat);

                EatDelegate ls 
    = new EatDelegate(lsObj.Eat);

                EatDelegate ww 
    = new EatDelegate(wwObj.Eat);
             
                
    //委托链
                EatDelegate eatChain=zs+ls+ww;

                Console.WriteLine(
    "张三,李四,王五开座谈会.");

                eatChain(
    "吃西瓜");

                Console.WriteLine(
    "李四出去接电话.");

                eatChain 
    -= ls;

                eatChain(
    "吃香蕉");

                Console.WriteLine(
    "李四回来了.");

                eatChain(
    "吃桔子");
            }
        }
    }

     委托当作方法参数进行调用:

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
        
    delegate void EatDelegate(String food);

        
    class Man
        {
            
    private string name;

            
    public Man(string name)
            {
                
    this.name = name;
            }

            
    public void Eat(string food)
            {
                Console.WriteLine(name
    +""+food);
            }
        }


        
    /*委托作为方法的参数进行传递*/
        
    class Party
        {
            
    /// <summary>
            
    /// 委托作为参数进行传递
            
    /// </summary>
            
    /// <param name="food">吃的东西</param>
            
    /// <param name="values">可变的委托参数</param>
            static void EatToghter(String food, params EatDelegate[] values)
            {
                
    if (values==null)
                {
                    Console.WriteLine(
    "座谈会结束");
                }
                
    else
                {
                    EatDelegate eatChain 
    = null;

                    
    foreach (EatDelegate eat in values)
                        eatChain 
    += eat;

                    eatChain(food);

                    Console.WriteLine();
                }
            }

            [STAThread]
            
    static void Main(string[] args)
            {

                Man zsObj 
    = new Man("张三");

                Man lsObj 
    = new Man("李四");

                Man wwObj 
    = new Man("王五");

                EatDelegate zs 
    = new EatDelegate(zsObj.Eat);

                EatDelegate ls 
    = new EatDelegate(lsObj.Eat);

                EatDelegate ww 
    = new EatDelegate(wwObj.Eat);
             
                
    //委托链
                EatDelegate eatChain=zs+ls+ww;

                Console.WriteLine(
    "张三,李四,王五开座谈会.");
                
                
    //调用委托作为参数的方法
                EatToghter("西瓜",zs,ls,ww);

                Console.WriteLine(
    "李四出去接电话.");
                
                
    //没有传递李四的委托
                EatToghter("香蕉", zs, ww);

                Console.WriteLine(
    "李四回来了.");
                
                
    //三个人继续吃香蕉
                EatToghter("香蕉", zs, ls, ww);

                EatToghter(
    null,null);
            }
        }
    }
  • 相关阅读:
    rest framework Genericview
    rest framework Views
    rest framework Response
    rest framework Request
    C# Unity 依赖注入
    C# 缓存
    使用 Log4Net 做日志
    ORM 与 数据持久化
    Mycat 配置 笔记
    .NET自我进阶以及第一个框架搭建(二)
  • 原文地址:https://www.cnblogs.com/jshchg/p/2101484.html
Copyright © 2020-2023  润新知