C# 如何将方法指定为方法的参数?
对于C#,我不熟悉,如何创建一个将方法作为其参数之一的方法 听起来有点奇怪,但我希望它能在c#中得到支持 这就是我所尝试的:C# 如何将方法指定为方法的参数?,c#,methods,C#,Methods,对于C#,我不熟悉,如何创建一个将方法作为其参数之一的方法 听起来有点奇怪,但我希望它能在c#中得到支持 这就是我所尝试的: public void CalculateRepairedCars(int total, /*here I want to pass a method..*/) { ... } 这是我想通过的方法: public int Calculate{int totalCars, Condition condition} { ... } 有多种方法。我以前用过一台电脑
public void CalculateRepairedCars(int total, /*here I want to pass a method..*/)
{
...
}
这是我想通过的方法:
public int Calculate{int totalCars, Condition condition}
{
...
}
有多种方法。我以前用过一台电脑
private void SomeMethod()
{
CalculateRepairedCars(100, YetAnotherMethod);
}
public void CalculateRepairedCars(int total, Action action)
{
action.Invoke(); // execute the method, in this case "YetAnotherMethod"
}
public void YetAnotherMethod()
{
// do stuff
}
如果作为参数传递的方法本身有参数(例如YetAnotherMethod(int-param1)
),则可以使用以下方法传递:
在我的例子中,我不必从作为参数传递的方法返回值。如果必须返回值,请使用及其相关重载
刚才看到您用调用的方法更新了代码
public int Calculate(int totalCars, Condition condition)
{
...
}
要返回值,您需要Func
:
public void CalculateRepairedCars(int total, Func<int, string, int> func)
{
var result
= func.Invoke(total, someCondition); // where's "condition" coming from?
// do something with result since you're not returning it from this method
}
c#方法类型称为委托。你可以声明它,分配一个方法,然后你可以用它做很多事情,包括把它作为一个参数传递。查一查!注意:委托的类型是安全的,因为委托必须与所指向的方法共享签名。C#中的“将方法放入值中”(然后可以使用该值执行许多操作,例如将参数传递给另一个方法)称为为为为该方法创建值 委托的类型直接对应于它所指向的方法的签名(即其参数和返回值的数量和类型)。C#为不返回值的委托(及其同级)和返回值的委托(及其同级)提供现成的类型 在您的例子中,
Calculate
的签名与类型匹配,因此您可以编写
public void CalculateRepairedCars(int total, Func<int, Condition, int> calc)
{
// when you want to invoke the delegate:
int result = calc(someCondition, someInteger);
}
这非常简单,但是参数的确切类型将取决于您想要接受的方法的签名是什么。查看
Func
和Action
类。为什么要这样做?但您可以传入操作或Func委托instead@Ahmedilyas这样做可能有很多原因。一个明显的例子是在方法完成时调用回调。@user3399628-im非常清楚。我只是想知道你的理由是什么-上下文是什么,如果你走的是正确的道路“将方法放入值中”这意味着什么?@user3399628:将其视为“将方法放入变量中”,例如Func f=Calculate
。只有变量不需要存在;查看如何在不首先定义变量的情况下将Calculate
传递给方法。我希望这有帮助:)f
不是一个变量?@user3399628:是的。但是您不一定需要声明一个来调用CalculateRepairedCars
。在CalculateRepairedCars
内部,calc
是一个委托类型的变量。
CalculateRepairedCars(100, Calculate);
public void CalculateRepairedCars(int total, Func<int, Condition, int> calc)
{
// when you want to invoke the delegate:
int result = calc(someCondition, someInteger);
}
CalculateRepairedCars(i, Calculate);