2

我想写一个这样的函数:

class Form 
{
    private void Foo()
    {
        int bar = 42;
        function myF = func1;

        if(today.weather == sunny)
            myF = func2;

        myF(bar);
    }

    private void func1(int bar) 
    {
        // do something
    }

    private void func2(int bar)
    {
        // do something
    }
}

我需要一个指向函数(如 C)的指针,可以创建一个吗?

4

4 回答 4

3

你正在寻找一个Delegate

class Form 
{
    private void Foo()
    {
        int bar = 42;
        Action<int> myF = func1; //<-- Action<T> is a delegate 

        if(today.weather == sunny)
            myF = func2;

        myF(bar);
    }

    private void func1(int bar) 
    {
        // do something
    }

    private void func2(int bar)
    {
        // do something
    }
}
于 2013-10-07T18:44:14.423 回答
2

查看委托(C# 编程指南)

class Form 
{
    delegate void MyFunction (int bar); 
    private void Foo() {
        int bar = 42;
        MyFunction myF = func1;
        if(today.weather == sunny)
            myF = func2;
        myF(bar);
    }
    private void func1(int bar) { 
        // do something 
    }
    private void func2(int bar) {
        // do something 
    }
}
于 2013-10-07T18:43:47.653 回答
2

您可以使用委托,但我更喜欢Funcor Action(取决于是否有返回类型)。

class Form 
{
    private void Foo()
    {
        int bar = 42;
        Action<int> myAction = func1;

        if(today.weather == sunny)
            myAction = func2;

        myAction(bar);
    }

    private void func1(int bar) 
    {
        // do something
    }

    private void func2(int bar)
    {
        // do something
    }
}
于 2013-10-07T18:44:25.763 回答
0

看看: http: //msdn.microsoft.com/en-us/library/ms173171 (v=vs.90).aspx

您可以创建自己的delegate

delegate void MyDel(int x);

或使用预定义的:

Action<Int>

无论哪种情况,这些都可用于创建您需要的内容。

于 2013-10-07T18:46:15.567 回答