是否有一个C#.Net等同于Objective-C的选择器

时间:2014-04-06 14:45:35

标签: c# objective-c events delegates selector

对于也使用C#.Net

的Objective-C开发人员来说,这是一个C#.net问题

如您所知, Objective-C 您可以将方法名称解析为选择器;并且该方法也可以属于外部类

我希望能够在C#.Net中使用这种类型的方法,因为它比创建事件的负载更加清晰,这些事件可能变得混乱且难以管理。

如果可以,我该如何实现?谢谢!

示例:

public class Main
{
    public void MyProcess(Callback toMethod)
    {
        // do some fancy stuff and send it to callback object       
        toMethod(result);
    }
}

public class Something
{
    public void RunMethod()
    {
        MyProcess(Method1);
        MyProcess(Method2);
    }

    private void Method1(object result)
    {
        // do stuff for this callback
    }

    private void Method2(object result)
    {
        // do stuff for this callback
    }
}

2 个答案:

答案 0 :(得分:0)

我不了解Objective-C,但我认为你想要这样的东西:

public class Main
{
    public void MyProcess(Action<object> toMethod, object result)
    {
        // do some fancy stuff and send it to callback object       
        toMethod(result);
    }
}

public class Something
{
    public void RunMethod()
    {
        object result = new object();
        MyProcess(Method1, result);
        MyProcess(Method2, result);
    }

    private void Method1(object result)
    {
        // do stuff for this callback
    }

    private void Method2(object result)
    {
        // do stuff for this callback
    }
}

答案 1 :(得分:0)

您必须使用Delegates。根据您问题中的代码,您将声明一个委托:

public delegate void MethodDelegate(object result);

流程方法的签名更改为以下内容:

public void MyProcess(MethodDelegate toMethod)
{
    // do some fancy stuff and send it to callback object       
    toMethod(result);
}

然后你会调用进程

public void RunMethod()
{
    MyProcess(new MethodDelegate(Method1));
    MyProcess(new MethodDelegate(Method1));
}