考虑以下类:
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/