C#中委托的应用与示例

委托

       委托是指把事情托付给别人或别的机构办理。在C#语言中委托是一种特殊类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。委托是具有特定参数列表和返回类型的方法的引用的类型(不是引用对象,而是引用方法

       可以委托将看作一个包含有序方法列表的对象,这些方法具有相同的签名和返回类型。这些方法可以来自任何类或结构,只要满足委托的返回类型与委托的参数。也可以是实例方法或者静态方法。

一、委托的应用

      委托的使用需遵循三步走原则,分别是定义委托、实例化委托,调用委托。

1、定义声明:

     委托定义的语法形式为: [访问修饰符] delegate <返回值类型> 委托名(参数列表); 。

// 定义委托打印方法
public delegate void PrintingMethod(object contents);

2、实例化

      定义声明委托后就可以实例化委托,其语法形式为 委托名 委托对象名=new 委托名(方法名);。​​​

// 实例化委托 ***即方法传入委托中
PrintingMethod printingMethod = new PrintingMethod(Log.Printing);

3、调用

      调用委托就是执行其调用列表中的所有方法,其语法形式为委托对象名(参数列表);。

// 调用委托实例             
printingMethod("委托调用执行方法");
示例:在委托中注入静态方法
using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        // 定义声明
        private delegate void PrintingMethod(object contents);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 实例化委托 使用其他类的方法
            PrintingMethod printingMethod = new PrintingMethod(Log.Printing);
            // 调用委托实例             
            printingMethod("委托调用执行方法");
            //
            Console.ReadKey();

        }
    }

    public class Log
    {
        /// <summary>
        /// 打印输出
        /// </summary>
        /// <param name="contents"></param>
        public static void Printing(object contents)
        {
            Console.WriteLine(string.Format("打印输出:{0}", contents));
        }
    }
}

输出结果:


打印输出:委托调用执行方法

二、委托的类型

       在C#中委托可以分为,命名方法委托、多播委托、匿名委托,其中命名方法委托是最常见的一种委托,在介绍委托的应用时就是命名方法委托。

1、多播委托

       多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中通过+=运算符或通过-=运算符来实现添加或删除方法。

PrintingMethod printingMethod = new PrintingMethod(Log.Printing);
// 添加方法
printingMethod += Log.End;
// 删除方法
printingMethod -= Log.End;
示例:
using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        // 定义声明
        private delegate void PrintingMethod(object contents);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 实例化委托 使用其他类的方法
            PrintingMethod printingMethod = new PrintingMethod(Log.Printing);

            printingMethod += Log.End;

            // 调用委托实例 一次执行二个方法             
            printingMethod("委托调用执行Printing与End方法");

            Console.WriteLine();

            printingMethod -= Log.End;

            // 调用委托实例
            printingMethod("委托调用执行Printing方法");
            //
            Console.ReadKey();

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="contents"></param>
        public static void EndPrinting(object contents)
        {
            Console.WriteLine(string.Format("打印完成:{0}", contents));
        }
    }
    /// <summary>
    /// 定义类
    /// </summary>
    public class Log
    {
        /// <summary>
        /// 打印输出
        /// </summary>
        /// <param name="contents"></param>
        public static void Printing(object contents)
        {
            Console.WriteLine(string.Format("打印输出:{0}", contents));
        }
        /// <summary>
        /// 结束
        /// </summary>
        /// <param name="contents"></param>
        public static void End(object contents)
        {
            Console.WriteLine(string.Format("打印结束:{0}", contents));
        }
    }
}

输出结果:

打印输出:委托调用执行Printing与End方法
打印结束:委托调用执行Printing与End方法

打印输出:委托调用执行Printing方法

2、匿名委托

      匿名委托是指在使用匿名方法注册在委托上,通过定义代码块来实现委托的作用。其格式如下:

// 定义委托
[访问修饰符] delegate 返回值类型  委托名(参数列表);
// 定义匿名委托
委托名 委托对象 = delegate
{
  // 代码块
};

// 调用匿名委托
委托对象名 (参数列表);
示例:
using System;

namespace Fountain.Net.Base.Sample
{
    class Program
    {
        // 定义声明
        private delegate void PrintingMethod(object contents);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {

            object contents = null;
            PrintingMethod nonPrintingMethod = delegate
            {
                Console.WriteLine(string.Format("代码块方式方法:{0}", contents));
            };
            nonPrintingMethod("匿名委托调用");
            //
            Console.ReadKey();
        }
    }
}

小结

     以上是关于C#委托的定义、应用及示例全部内容,委托内容还有很多,敬请关注后续内容。 

猜你喜欢

转载自blog.csdn.net/Funniyuan/article/details/143086091