委托给私有函数作为不同类中方法的参数

本文关键字:同类 方法 参数 函数 | 更新日期: 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.x5。有可能吗?如果是,如何?

委托给私有函数作为不同类中方法的参数

您可以为方法创建一个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);
    }
}

这是一把小提琴,表明它是有效的——为了演示的目的,我把一些私人的改成了公共的。