下面是C#中委托的基础入门与实现方法的攻略。
什么是委托
在C#中,委托是一种类型,它允许我们将一个或多个方法作为参数传递给其他方法,或者将方法保存在集合中等。委托本质上是一个指向方法的引用。使用委托可以使代码更加灵活、扩展性更好。
委托的声明和实例化
声明一个委托需要使用 delegate
关键字,并定义返回类型和参数列表。比如:
delegate void SampleDelegate(string input);
上面的声明定义了一个返回类型是 void
,有一个 string
类型参数的委托 SampleDelegate
。
实例化一个委托需要先实例化委托所对应的方法,再将该方法的引用赋给委托变量。比如:
public void MethodA(string input)
{
Console.WriteLine($"Method A says: {input}");
}
SampleDelegate delegateA = new SampleDelegate(MethodA);
delegateA("Hello, World!");
在上面的例子中,首先定义了一个名为 MethodA
的方法,它接收一个字符串类型的参数,然后在控制台输出该参数。接下来,我们实例化了一个委托 delegateA
,并将 MethodA
的引用赋给了该委托。最后调用委托变量时,实际上会调用 MethodA
方法并输出 Hello, World!
。
委托的多播
在C#中,我们可以使用多个方法实例化一个委托。当调用该委托时,就会按照它们被加入委托时的顺序,逐一执行这些方法。比如:
public void MethodB(string input)
{
Console.WriteLine($"Method B says: {input}");
}
SampleDelegate delegateAB = new SampleDelegate(MethodA);
delegateAB += new SampleDelegate(MethodB);
delegateAB("Hello, World!");
在这个例子中,我们首先用 MethodA
实例化了委托 delegateAB
。然后又用 MethodB
实例化了一个同样类型的委托,并使用 +=
操作符将它加入到 delegateAB
中。最后调用 delegateAB
,会依次输出:
Method A says: Hello, World!
Method B says: Hello, World!
注意,在多播委托中执行方法的顺序是不确定的。
示例一:使用委托实现回调函数
回调函数是一种常见的编程模式,它允许我们将方法作为参数传递给另一个方法,在需要的时候调用它。我们可以使用委托来实现回调函数。比如:
delegate int Calculator(int x, int y);
public int Add(int x, int y)
{
return x + y;
}
public int Subtract(int x, int y)
{
return x - y;
}
public void CalculatorTest(int x, int y, Calculator calculator)
{
int result = calculator(x, y);
Console.WriteLine($"Result: {result}");
}
Calculator calculator1 = new Calculator(Add);
CalculatorTest(10, 5, calculator1); //输出 15
Calculator calculator2 = new Calculator(Subtract);
CalculatorTest(10, 5, calculator2); //输出 5
在这个例子中,我们首先定义了一个委托 Calculator
,它接收两个 int
类型的参数,返回一个 int
类型的值。然后我们定义了两个方法 Add
和 Subtract
,它们分别实现了加法和减法操作。接下来我们定义了一个名为 CalculatorTest
的方法,它接收三个参数:两个 int
类型的输入参数,和一个 Calculator
委托类型的参数。该方法内部会调用委托 calculator
,并将输入参数传递给委托,最后输出执行结果。
我们用 Add
方法实例化了委托 calculator1
,并调用了 CalculatorTest
方法,输出了加法的结果。接着用 Subtract
方法实例化了另一个委托 calculator2
,再次调用了 CalculatorTest
方法,输出了减法的结果。
示例二:使用Func和Action委托类型
C#提供了一些内置委托类型,比如 Func
和 Action
。它们分别用于表示有返回值和没有返回值的委托。使用这些内置委托类型可以避免额外的委托声明和实例化。比如:
public void Print(string s)
{
Console.WriteLine(s);
}
public void Process(Func<int> func)
{
int result = func();
Console.WriteLine($"Result: {result}");
}
public void Process(Action<string> action)
{
action("Hello, World!");
}
Process(() => 7); //输出 Result: 7
Process(Print); //输出 Hello, World!
在这个例子中,我们首先定义了一个名为 Print
的方法,它接收一个字符串参数并在控制台输出该参数。然后我们又定义了一个名为 Process
的方法,它接收一个 Func<int>
类型的参数。在该方法内部,我们调用参数 func
,获得返回值并输出。我们也可以定义一个另一个名为 Process
的方法,它接收一个 Action<string>
类型的参数。该方法调用参数 action
,并将字符串 "Hello, World!"
传递给它。最后我们调用 Process
,传递了一个用 lambda 表达式形式表示的委托,它返回常量值 7
。再一次调用 Process
时,我们传递了 Print
方法的引用,使其作为委托被调用,在控制台输出了字符串 "Hello, World!"
。
以上就是C#中委托的基础入门与实现方法的攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中委托的基础入门与实现方法 - Python技术站