c# 委托的常见用法
委托的基本概念
C#中,委托是一个类,它允许将方法作为参数传递给另一个方法,或者将方法存储在字段或属性中,以便稍后调用。委托是一种语言结构,它允许我们使代码更加模块化,并提高代码的可读性。
委托的声明
使用一个 delegate
关键字即可声明一个委托类型,委托类的名称有一定规范,通常以 Func
或 Action
开头,后接参数和返回值类型,例如:
delegate bool FuncTest(int a, int b);
delegate void ActionTest(int a, int b, out int sum);
其中,Func
委托表示一个带有输入和输出的方法,返回类型为 bool。
Action
委托表示一个带有输入和输出的方法,但没有返回值。
委托的实例化
当委托声明后,需要实例化委托,这通常可以使用匿名方法来进行实例化,例如:
FuncTest myFuncTest = delegate (int a, int b) { return a > b; };
ActionTest myActionTest = delegate (int a, int b, out int sum) { sum = a + b; };
上面的示例中,实例化了一个 FuncTest
类型的委托 myFuncTest
和一个 ActionTest
类型的委托 myActionTest
。
委托的使用
委托作为函数参数
委托的一个常见用法就是将它作为函数的参数。下面是一个示例:
static void PrintResult(int a, int b, FuncTest myFuncTest)
{
if (myFuncTest(a, b))
{
Console.WriteLine($"{a} is greater than {b}");
}
else
{
Console.WriteLine($"{b} is greater than {a}");
}
}
使用示例:
PrintResult(2, 5, myFuncTest); // 输出 "5 is greater than 2"
PrintResult(10, 8, myFuncTest); // 输出 "10 is greater than 8"
委托作为变量
委托也可以作为变量使用,可以将委托存储在字段或属性中,以便稍后调用。例如:
class MyClass
{
private readonly ActionTest _myActionTest;
public MyClass(ActionTest myActionTest)
{
_myActionTest = myActionTest;
}
public int Sum(int a, int b)
{
_myActionTest(a, b, out int sum);
return sum;
}
}
使用示例:
MyClass myClass = new MyClass(myActionTest);
int sum = myClass.Sum(3, 4); // sum 值为 7
上面的示例中,我们将 ActionTest
类型的委托存储在 _myActionTest
字段中,用它来计算两个数的和,最终返回结果。
总结
委托是 C# 中的一种强大的语言结构,它允许我们通过传递方法,将代码封装成更小的块,并可以轻松地将它们组合在一起使用。除了上述示例,委托还有很多其他的用法,例如事件处理和回调函数等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 委托的常见用法 - Python技术站