C#中委托的简单应用


前言

C#中的委托是对方法的引用类型,为委托分配方法后,委托与引用方法具有相同的行为。相当于委托内部包含了一个指向某种方法的指针,调用委托对象就可以调用引用的方法。


1、委托的声明

委托声明的格式如下:
[修饰符] + delegate + [返回类型] + [委托名称] + ([参数列表])

delegate为委托关键字;
[修饰符]为可选项;
delegate + [返回类型] + [委托名称]是必须项;
[参数列表]用来指定委托所匹配的方法的参数列表。;

声明方式如下:

delegate void MyDelegate(string s);

2、委托的实例化

委托实例化的过程就是将委托与方法关联的过程。

委托实例化方法类似于方法调用,但不同的是,委托不传递参数,而是直接写方法名;
委托实例化方法有两种方式:静态方法和实例方法

两种实例化方法如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows;

namespace 委托1
{
    internal class Program
    {
        public delegate void Mydelegate(string s);
        public class Class1
        {
            public static void Method1(string s) 
            { 
                MessageBox.Show(s); 
            }
            public void Methods(string s) 
            {
                MessageBox.Show(s);
            }
        }
        static void Main(string[] args)
        {
            Mydelegate my = new Mydelegate(Class1.Method1); //实例化委托的静态方法
   
            Class1 C = new Class1();     //实例化委托的实例方法
            Mydelegate my2 = new Mydelegate(C.Methods); 
            my.Invoke("Method1");
            my2.Invoke("Methods");
            Thread.Sleep(1000);
        }
    }
}

3、委托的调用

一般使用委托名称+传递给委托的参数进行委托的调用,如下所示:

my.Invoke("Method1");
my2.Invoke("Methods");
//也可以直接调用
my ("Method1");
my2 ("Methods");

4、委托调用匿名方法和命名方法

以上的调用方式就是命名方法的调用,匿名方法调用需要将委托的引用指向匿名方法,两种调用方法代码如下(示例):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 匿名方法
{
    delegate void DelOutput(string K);
    internal class Program
    {
        static void NamedMethod(string K)
        {
            Console.WriteLine(K);
        }
        static void Main(string[] args)
        {
            //委托的引用指向匿名方法
            DelOutput del = delegate (string j)
            {
                Console.WriteLine(j);
            };
            //调用匿名方法
            del.Invoke("匿名方法被调用");
            Console.WriteLine("\n");
            //调用命名方法
            del = NamedMethod;
            del.Invoke("命名方法被调用");
            Console.ReadLine();
        }
    }
}
  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值