C# Delegate类

Delegate作用
Delegate(托付、委托)类,通过它可 引用 静态方法或引用实例的方法。
一般用于事件和处理的方法关联

Delegate基本写法:
① 声明Delegate。 写法: 访问修饰符 delegate 返回值类型 自定义方法名(参数类型 参数,......); 注意参数要和调用方法的参数对应起来。
② 编写引发Delegate的函数
③ 编写Delegate操作的方法。
④ 使用


例子
using System;
using System.Collections.Generic;
using System.Text;

namespace DelegateDemo
{
    class Class1
    {
        delegate double processDelegate(double db1, double db2);
        static double Multiply(double db1, double db2)
        {
            return db1 * db2;
        }
        static double Divide(double db1, double db2)
        {
            return db1 / db2;
        }
        static void NamedMethod(string strInput,double dbNum1,double dbNum2)
        {
            processDelegate process;           
            if (strInput == "M")
                process = new processDelegate(Multiply);
            else
                process = new processDelegate(Divide);
            Console.WriteLine("结果为:{0}", process(dbNum1, dbNum2));

        }
        static void AnonymousMethod(string strInput, double dbNum1, double dbNum2)
        {
            processDelegate process;
            if (strInput == "M")
                process = delegate(double db1, double db2){return db1 * db2;};
            else
                process = delegate(double db1, double db2) { return db1 / db2; };
            Console.WriteLine("结果为:{0}", process(dbNum1, dbNum2));

        }
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: 在此处添加代码以启动应用程序
            Console.WriteLine("请输入两个小数,用逗号分割");
            string strInput = Console.ReadLine();
            int commmaPos = strInput.IndexOf(',');
            double dbNum1 = Convert.ToDouble(strInput.Substring(0, commmaPos));
            double dbNum2 = Convert.ToDouble(strInput.Substring(commmaPos + 1));
            Console.WriteLine("输入M表示乘法,或者D表示除法");
            strInput = (Console.ReadLine()).ToUpper();
            //使用命名方法
            Console.WriteLine("使用命名方法委托");
            NamedMethod(strInput,dbNum1,dbNum2);  
            //使用匿名方法
            Console.WriteLine("使用匿名方法委托");
            AnonymousMethod(strInput, dbNum1, dbNum2);  

        }
    }

}

 

C#中的委托(Delegate)是一种型,它允许将方法作为参数传递给其他方法。委托可以看作是对方法的引用,可以用来实现回调函数和事件处理等功能。 在C#中,委托的定义需要使用`delegate`关键字。下面是一个简单的委托定义的示例: ```csharp delegate void MyDelegate(string message); ``` 上述代码定义了一个名为`MyDelegate`的委托型,它接受一个`string`型的参数,并且返回值为`void`。 使用委托时,可以在委托变量上使用`+=`操作符来添加方法,也可以使用`-=`操作符来移除方法。当调用委托时,将依次执行已添加的方法。 下面是一个使用委托的示例: ```csharp class Program { static void Main(string[] args) { MyDelegate delegate1 = Method1; MyDelegate delegate2 = Method2; delegate1("Hello"); delegate2("World"); } static void Method1(string message) { Console.WriteLine("Method1: " + message); } static void Method2(string message) { Console.WriteLine("Method2: " + message); } } ``` 运行上述代码将输出: ``` Method1: Hello Method2: World ``` 在上述示例中,我们首先定义了两个方法`Method1`和`Method2`,它们与委托`MyDelegate`具有相同的签名。然后我们创建了两个委托变量`delegate1`和`delegate2`,分别指向这两个方法。最后,我们通过调用委托变量来执行这两个方法。 需要注意的是,委托可以用来实现事件处理、多播委托等功能。还可以使用匿名方法或Lambda表达式来创建委托,使代码更加简洁和灵活。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值