c# - 在两个函数上调用委托(delegate)

标签 c#

考虑以下类:

class A
{
void f1(int a){}
void f2(int b){}
}

我想做以下事情:

A a = new A();
A b = new B();

Func f = A.f1(1); //A function that has already got arguments.
Func ff = A.f1(10); //A function that has already got arguments.

a.f(); //Calls a.f1(1);
a.ff(); //Calls a.f1(10);
b.f(); //Calls b.f1(1);

我认为这行不通,但如果有人能证明我是错的,我很高兴。

最佳答案

你应该使用 closures捕获函数参数:

Action f = () => a.f1(1);
Action ff = () => a.f1(10);

稍后您可以调用:

f();  // calls a.f1(1)
ff(); // calls a.f1(10)

如果你想调用f1 a 上的方法或 b实例(我假设你在这里有 B : A 继承),那么你应该使用 Action<T>将接受实例调用的委托(delegate) f1方法:

Action<A> f = x => x.f1(42);

并使用您想要运行方法的实例调用此操作 f1使用捕获的参数 falue (42):

f(a); // calls a.f1(42)
f(b); // calls b.f1(42)

关于c# - 在两个函数上调用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42276453/

相关文章:

c# - 使用 Firebug 和 Selenium 自动进行页面加载性能测试

c# - 如何固定 Mdi 子窗体的位置?

c# - SiteFinity URL 重写正则表达式

c# - 为什么这个文件默认保存在IIS Express文件夹中?

C# 从带引号的字符串中删除分隔符

c# - 如何使用 Selenium Grid2 在一个集线器上运行多个浏览器

c# - 立即显示启动画面

c# - 如何使用 C# 获取父类别? (包括点网 fiddle )

c# - Entity Framework Core 2.2 在单元测试时拆除后不重置

c# - 使用表单元素与 UserControls 交互