Delegate.Combine

今天看到了Delegate.Combine静态方法,就随手测试了下。

本以为只要是参数和返回类型相同的 就可以了,如下所示

Delegate d3 = Delegate.Combine(newtext1(method1), newtext2(method2));

结果报错, “委托必须具有相同的类型。”

将两个参数都改为text1后运行正常,

public delegate void text1();

public delegate void text2();

public void method1() { MessageBox.Show("m1"); }

public void method2() { MessageBox.Show("m2"); }

private void button2_Click(object sender, EventArgs e)

{Delegate d3 = Delegate.Combine(new text1(method1), new text1(method2));

this.Invoke(d3);

 }

相当于事件的+=方法。




本文出自 “学习是一种信仰” 博客,请务必保留此出处http://kevin130.blog.51cto.com/429518/1202707

在 C# 中,可以使用 `Delegate.Remove` 方法从一个委托中移除另一个委托中的方法。该方法的语法如下: ``` public static Delegate Remove(Delegate source, Delegate value); ``` 其中,`source` 参数是要从中移除方法的委托,`value` 参数是要移除的方法所在的委托。该方法返回一个新的委托,其中不包含已被移除的方法。 以下是使用 `Delegate.Remove` 方法从委托中移除方法的示例: ``` delegate void MyDelegate(string message); class MyClass { public void MyMethod1(string message) { Console.WriteLine("Method 1: " + message); } public void MyMethod2(string message) { Console.WriteLine("Method 2: " + message); } } class Program { static void Main(string[] args) { MyClass myClass = new MyClass(); MyDelegate myDelegate1 = new MyDelegate(myClass.MyMethod1); MyDelegate myDelegate2 = new MyDelegate(myClass.MyMethod2); // 将两个委托合并成一个 MyDelegate myDelegate = (MyDelegate)Delegate.Combine(myDelegate1, myDelegate2); // 从委托中移除方法 myDelegate = (MyDelegate)Delegate.Remove(myDelegate, myDelegate1); // 调用委托中的方法 myDelegate("Hello World"); } } ``` 在上面的示例中,我们首先创建了两个委托 `myDelegate1` 和 `myDelegate2`,分别包含方法 `MyMethod1` 和 `MyMethod2`。接着,我们使用 `Delegate.Combine` 方法将两个委托合并成一个委托 `myDelegate`。然后,我们使用 `Delegate.Remove` 方法从委托 `myDelegate` 中移除委托 `myDelegate1`,最后调用委托中的方法。由于我们已经将委托 `myDelegate1` 从委托 `myDelegate` 中移除,因此调用委托时只会执行方法 `MyMethod2`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值