C#中委托是一种能够存储方法的一种类型。委托可以用来实现回调函数,事件处理程序和多路广播事件等。下面是C#中委托用法的完整攻略。
1.定义委托类型
在定义委托时,需要指定返回类型和参数列表,如下所示:
delegate void MyDelegate(int x, int y);
表示MyDelegate是一种委托类型,接受两个int类型的参数,无返回值。
2.实例化委托
可以像实例化对象一样实例化委托,也可以直接将方法名作为委托实例化。如下所示:
public class TestClass
{
public static void Add(int a, int b)
{
int c = a + b;
Console.WriteLine("Addition of a and b is: " + c);
}
}
class Program
{
static void Main(string[] args)
{
MyDelegate d1 = new MyDelegate(TestClass.Add);
d1(10, 20);
}
}
上述代码中,我们将静态方法Add作为委托实例化,然后通过委托调用该方法。
另外一种实例化方法如下所示,也可以直接将方法名作为委托实例化。
MyDelegate d2 = TestClass.Add;
3.使用委托
我们可以通过委托调用该委托所关联的方法。委托可以使用Invoke函数来调用。Invoke函数与调用普通函数类似,只需要传递参数即可。如下所示:
d1.Invoke(20, 30);
也可以使用()运算符来调用委托:
d1(20, 30);
4.委托的多路广播
委托的多路广播允许一个委托关联多个方法。多路广播使得委托能够触发一组方法,可以通过加号(+)或加等于(+=)运算符来添加多个方法。
MyDelegate d = TestClass.Add;
d += TestClass.Subtract;
d += TestClass.Multiply;
d += TestClass.Divide;
d(100, 20);
上述代码中,d将关联Add、Subtract、Multiply和Divide方法,并将会依次调用这些方法。
示例说明
下面来看两个实际的例子:
1.通过委托实现计算器:
public class Calculator
{
public delegate int Operator(int x, int y);
public static int Add(int a, int b)
{
return a + b;
}
public static int Subtract(int a, int b)
{
return a - b;
}
public static int Multiply(int a, int b)
{
return a * b;
}
public static int Divide(int a, int b)
{
return a / b;
}
}
class Program
{
static void Main(string[] args)
{
Calculator.Operator op = Calculator.Add;
Console.WriteLine(op(2, 3)); // 输出:5
op += Calculator.Subtract;
op += Calculator.Multiply;
op += Calculator.Divide;
Console.WriteLine(op(10,2)); // 输出:25
}
}
在上述代码中,我们通过定义一个计算器类,实现了加、减、乘、除四种算术运算。然后,我们定义一个Operator委托类型,并实例化Add方法。接着,我们通过+=运算符将Add、Subtract、Multiply和Divide方法都关联到这个委托上,并最终调用这些方法。
2.通过委托实现事件处理程序:
public class Button
{
public delegate void ClickHandler(object sender, EventArgs e);
public event ClickHandler Click;
public void OnClick()
{
if(Click != null)
{
Click(this, EventArgs.Empty);
}
}
}
public class Form
{
public void Button_Click(object sender, EventArgs e)
{
Console.WriteLine("Button clicked");
}
}
class Program
{
static void Main(string[] args)
{
Button b = new Button();
Form f = new Form();
b.Click += f.Button_Click;
b.OnClick(); // 输出:Button clicked
}
}
在上述代码中,我们定义了一个Button和Form类。Button类包含了ClickHandler委托类型和Click事件。Form类中有一个Button_Click方法,当这个Button被点击时将会调用Button_Click方法,在Button_Click方法中,我们简单地将字符串输出到控制台。在Main函数中,我们实例化一个Button和一个Form对象,并通过+=运算符将Button_Click方法关联到Button类的Click事件上。在OnClick方法中,我们检查是否有方法注册在Click事件上,若有则依次调用它们。最后,我们调用OnClick方法,这将会触发Button_Click方法并在控制台上输出“Button clicked”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中委托用法 - Python技术站