委托给私有函数作为不同 class 中方法的参数
Delegate to private function as argument for method in different class
让我们使用私有方法 f()
和 g()
class A
。让classB
有public方法h
。是否可以将指向 A.g
的 pointer/delegate 从方法 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
。可能吗?如果是,怎么做?
是的,有可能:
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);
}
}
Here 是一个 fiddle 表明它有效 - 为了演示目的,我将一些私人更改为 public。
您可以为您的方法创建一个 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);
}
}
让我们使用私有方法 f()
和 g()
class A
。让classB
有public方法h
。是否可以将指向 A.g
的 pointer/delegate 从方法 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
。可能吗?如果是,怎么做?
是的,有可能:
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);
}
}
Here 是一个 fiddle 表明它有效 - 为了演示目的,我将一些私人更改为 public。
您可以为您的方法创建一个 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);
}
}