委托给私有函数作为不同类中方法的参数
本文关键字:同类 方法 参数 函数 | 更新日期: 2023-09-27 17:50:20
让我们采用具有私有方法f()
和g()
的类A
。让类B
具有公共方法h
。是否可以将指向A.g
的指针/委托从方法A.f
传递到B.h
?
考虑以下代码:
Class B
{
public B() {}
public h(/*take pointer/delegate*/)
{
//execute method from argument
}
}
Class A
{
private int x = 0;
private void g()
{
x = 5;
}
private void f()
{
B b = new B();
b.h(/*somehow pass delegate to g here*/);
}
}
在调用A.f()
之后,我希望A.x
是5
。有可能吗?如果是,如何?
您可以为方法创建一个Action
参数:
public h(Action action)
{
action();
}
然后这样称呼它:
b.h(this.g);
可能值得注意的是,Action
的一些通用版本表示带有参数的方法。例如,Action<int>
将与任何具有单个int
参数的方法相匹配。
是的。
class B
{
public B()
{
}
public void h(Action func)
{
func.Invoke();
// or
func();
}
}
class A
{
private int x = 0;
private void g()
{
x = 5;
}
private void f()
{
B b = new B();
b.h(g);
}
}
是的,有可能:
class B
{
public B() {}
public void h(Action a)
{
a();
}
}
class A
{
private int x = 0;
private void g()
{
x = 5;
}
private void f()
{
B b = new B();
b.h(g);
}
}
这是一把小提琴,表明它是有效的——为了演示的目的,我把一些私人的改成了公共的。