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

时间:2015-05-20 22:13:04

标签: c# delegates function-pointers

让我们使用私有方法Af()上课g()。让课程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。可能吗?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:5)

您可以为方法创建Action参数:

public h(Action action)
{
    action();
}

然后像这样调用它:

b.h(this.g);

可能值得注意的是,Action的通用版本表示带参数的方法。例如,Action<int>会将任何方法与单个int参数匹配。

答案 1 :(得分:3)

是的。

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);
    }
}

答案 2 :(得分:2)

是的,有可能:

onView (withId (android.R.id.list)).check (ViewAssertions.matches (Matchers.withListSize (1)));

Here是一个小提琴,表明它有效 - 为了示范目的,我将一些私人改为公众。