C#委托基础

  在学到方法参数传递和返回值后,有时候就会想,如果方法也能当参数进行传递,那很多时候就很方便了,这时候我们就会想到一种类型---委托了。

  委托关键字为delegate 下面我们来看看它的基本用法

 public delegate void Mydele();//定义了一个无参无返回值的委托类型
        public delegate int Mydele1();//定义了一个返回值为int,无参的委托类型
        public delegate void Mydele2(int a);//定义了一个无返回值,参数为int的委托类型
        public delegate int Mydele3(int a, string b);//定义了一个返回值为int,参数为int和string的委托类型
        public void Text0()
        {
            Console.WriteLine("Text");
        }
        public int Text1()
        {
            Console.WriteLine("Text1");
            return 0;
        }
        public void Text2(int data)
        {
            Console.WriteLine("Text2");
        }
        public int Text3(int data,string str)
        {
            Console.WriteLine("Text3");
            return 0;
        }
        public void Text4(Delegate a)
        {
            Console.WriteLine("Text4");
        }
       public void Text()
        {
            Mydele mydele = Text0;//指向返回值和参数和委托类型相同的方法
            Mydele1 mydele1 = Text1;
            Mydele2 mydele2 = Text2;
            Mydele3 mydele3 = Text3;
            mydele();
            mydele2(1);//使用委托调用方法
            Text4(mydele3);//将委托作为参数传递,相当于将方法当参数传递到别的方法里去
        }

委托中添加和删除方法

一个委托可以指向多个方法,第一次调用是调用最近一次添加的方法。

mydele+=Text5;
mydele-=text4;

mydele=Text;//等于号为赋值,直接覆盖里面所有的方法

上面代码演示了普通委托的定义声明和使用,一个委托可定义最多有16个参数的,下面我们再看看系统自带的三个特殊委托

Action委托:

Action是无返回值的泛型委托。

Action 表示无参,无返回值的委托

Action<int,string> 表示有传入参数int,string无返回值的委托

Func委托:

Func是有返回值的泛型委托

Func<int> 表示无参,返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

predicate委托:

predicate 是返回bool型的泛型委托

predicate<int> 表示传入参数为int 返回bool的委托。

使用Labmda表达式使用委托:

Mydele d2= (string name) => { Console.WriteLine("你好,{0}!", name); };

d2("Terry");

括号中的string name表示方法参数,大括号里的是方法体。

使用匿名方法使用委托:

delegate void TestDelegate(string myName);

TestDelegate d2 = delegate(string name)
{

Console.WriteLine("Hello,{0}!", name);

};

d2(“Test”);

相当于用delegate代替了方法名。

事件

事件也是一种特殊的委托,事件只能在本类的内部使用=赋值,只能在本类内部调用,在外部类中,只能使用+=和-=添加和删除,不能在外部类调用,事件大大增加了委托的安全性和规范性。事件使用关键字event。

        public event Mydele mydele = Text0;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值