我们在实际使用中,已经习惯了直接把参数传入方法让方法可以用这个参数,这是行参
委托就是能够把方法作为参数传递
但是有时候需要跨个页面,比如winform中的自定义控件,你知道需要做这么一个事情,但是不知道怎么做,这种情况就需要使用委托了,现在自定义控件中定义一个委托,然后在外面传入,到了合适的执行时机,控件会调用它定义的那个委托,委托的内部是我们从外面传入的方法,这样执行的就是外面的那个方法了,就解决了在我们这一头调用另一头的东西了
委托的写法: 访问修饰符 返回值 delegate 委托名字(参数1,参数2) 双方约定好传入的委托格式,就在传入的一方,定义一个具体的方法,这个方法需要和委托声明的签名一样,然后new 委托1(具体执行方法的名称),然后调用自定义控件暴露出来的接口,把这个委托传入
在自定义控件内接到这个委托后,把这个传入的委托赋值给在前面自定义委托,然后传入参数调用这个委托就可以了
下面用详细代码进行说明:
先自定义一个用户控件:代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CLibrary
{
public partial class MyControl: UserControl
{
Action<string> func;
string requestStr = string.Empty;
public MyControl()
{
InitializeComponent();
}
public void GetFunc(Action<string> ac,string str)
{
func = ac;
requestStr = str;
InitializeComponent();
}
//显示控件内文本框文字
private void btn1_Click(object sender, EventArgs e)
{
MessageBox.Show(txt1.Text);
}
//执行委托
private void btn2_Click(object sender, EventArgs e)
{
if(func!=null)
func(requestStr);
else
{
MessageBox.Show("还没传递参数呢");
}
}
}
}
这里的GetFunc就是暴露出去用来接收委托的,外面传入的代码:
string str = "我是因位菩萨";
private void button1_Click(object sender, EventArgs e)
{
myControl1.GetFunc(Alert, str);
}
然后再点击btn2就能调用到委托及传入的参数了,如果直接点是会提示没有传入参数的 ,因为这时候委托并没有传入,点击winform的按钮传入后在点击就可以了
自己学习的过程中总结的,如果对大家也有用就更好啦 么么哒