正常的话
我们建立一个事件委托,是否有返回值,名称,参数类型
public delegate void Delobj(string name1,string name2);
声明好委托之后我们可以对委托进行赋值,也就是传递方法给委托
public void func1(string name1,string name2){}
Delobj do=func1;
或者 Delobj do=new Delobj(func1);
然后执行这个委托
string name1="张三";
string name2="李四";
do(name1,name2);
如果需要对这个委托添加其他方法,那么可以 do+=func2; do+=func3; 注意 第一次实例化的时候要用 = 而不是+=。
如果不想使用里面的一个方法,那么可以使用 do-=func2;这样就会移除这个方法
以上就是我们建立委托最普通的方式;
事件的话,就是委托的一个实例对象,比如
public event Delobj eventObj;
在拥有事件的类中,事件拥有委托的所有功能,但是在类的外面,我们无法直接调用事件,只能通过其他的方式来触发
可以参考一下我写的经典的事件触发模式。
其他建立委托的方式
建立一个匿名无返回值的委托类型
public void changeProcess(object send,ValueArgs e)
{
Action delobj = () => this.progressBar1.Value = e.value;
}
建立一个匿名有参数的委托类型,但是参数类型必须要声明
Action<int,string> delobj = (x,y) => { this.progressBar1.Value = x;this.button1.Text = y; };
或者我们可以建立有返回值的匿名无参数委托类型,注意 必须声明一个返回值类型
Func<string> fuobj = () => { string str = "test";return str; };
或者建立有返回值有参数的委托类型,最后一个是返回值类型
Func<string,int> fuobj = (x) => { int y = Convert.ToInt32(x); return y; };