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

デリゲートを使用することもできますが、(戻り値の型があるかどうかに応じて) 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 に答える