前言
大家好,我是阿辉。
昨天大家和我一起学习了,C#中的委托,了解了什么是委托,也简单写了一个委托的完整实例。那么为什么会出现委托!委托该如何使用!
委托有如下好处:
- 委托实现了将方法当作参数使用。
- 在两个不能直接调用的方法中作为桥梁。比如在多线程中的跨线程的方法调用就得用委托。
- 当不知道方法具体实现什么时使用委托。如事件中使用委托。
委托的用法
给委托赋值
由于委托是引用类型,可通过给它赋值来改变包含在委托变量中的引用,旧的委托将被GC回收处理。
//给委托赋值
testOne = new MyDel(Test);
testOne = new MyDel(Test1);
上面的代码就给委托变量testOne重新赋值为方法Test1,之前赋值的委托方法Test将被GC回收,当委托被调用时,不执行。
组合委托
一般情况在委托调用列表只有一个方法,其实委托可以通过特殊的运算符来组合方法,也就是调用列表中某一个方法是其它两个方法的组合。
//1、声明委托
MyDel testOne;
MyDel testTwo
//2、给委托赋值
testOne = new MyDel(Test);
testTwo = new MyDel(Test);
MyDel testThree=testOne+testTwo;
//3、调用执行
testOne(1);
testTwo(2);
testThree(3);
为委托添加方法
使用运算符+=来为委托添加方法。
testOne = new MyDel(Test);
testOne += Test1;
可以为委托添加多个方法,每次添加都会在调用列表中创建一个新的元素。
从委托删除方法
使用运算符-=来删除委托中的方法。
testOne = new MyDel(Test);
testOne -= Test;
调用带返回值的委托
可以像调用方法一样简单的调用委托,用于调用委托的参数将会用于调用调用列表中的每一个方法。
如果一个方法在调用列表中出现多次,当委托被调用时,每次在列表中遇到这个方法时它都会被调用。
delegate int MyDel(int x);
MyDel testOne;
testOne = new MyDel(Test);
var a=testOne(1);
Console.WriteLine("委托返回的值:"+a);
static int Test(int value)
{
Console.WriteLine("Test 接收的值:"+value);
return value + 5;
}
调用带引用参数的委托
//1、定义委托
delegate void MyDel(ref int x);
static void Main(string[] args)
{
//2、声明委托
MyDel testOne;
//3、给委托赋值
testOne = new MyDel(Test);
int value=1;
//4、调用执行
testOne(ref value);
Console.WriteLine("引用参数值:" + value);
Console.ReadKey();
}
static void Test(ref int value)
{
Console.WriteLine("Test 接收的值:"+value);
++value;
}
寄语
人生短暂,我不想去追求自己看不见的,我只想抓住我能看得见的。
原创不易,给个关注。
我是阿辉,感谢您的阅读,如果对你有帮助,麻烦点赞、转发 谢谢。