2017-10-17 8 views
4

私はかなり可能です(少なくともJavaではこれが可能です)、私はC#初心者です。C#beginner - 同じ関数のコールバック

私はコールバック(一部の作業が終了したことを他の方法で通知する)を含む関数を持っています。

私はそこでパラメータを失い、コールバック関数でパラメータを渡すことができないので、別の関数を呼びたくないです。どのように私は同じ機能のすべてを行うことができますか?

私が今やっている:

public static Tween Play(Tween tweenToPlay) 
{ 
    return tweenToPlay.Play().OnComplete(RewindCallback); 

} 

private static void RewindCallback() 
{ 
    // Execute some code after Tween is completed 
} 

を私が実際に欲しい:あなたはこのように、ラムダ式を

public static Tween Play(Tween tweenToPlay) 
{ 
    return tweenToPlay.Play().OnComplete(/*Create a function that will execute here*/); 
} 

答えて

12

匿名メソッドが必要ですか?

public static Tween Play(Tween tweenToPlay) 
{ 
    return tweenToPlay.Play().OnComplete(() => 
    { 
     //... your code 
    }); 
} 
+0

九全体秒! –

+1

それは素晴らしいです!私はこれもラムダ式と呼ばれることがわかりますか?匿名メソッドとラムダ式の違いは何ですか? – rootpanthera

+0

ラムダ式は基本的に汎用代理人である 'Func 'または 'Action 'ですが、無名メソッドは名前のないメソッドです –

14

を意味していますか?

public static Tween Play(Tween tweenToPlay) 
{ 
    return tweenToPlay 
     .Play() 
     .OnComplete(() => { 
      // Do stuff 
     }); 
} 
3

匿名/ラムダの方が書き込みが簡単ですが、複雑さによっては、完全な本格的なクラスを次のように使用することもできます。

その変数のフィールドと適切なコールバック関数を持つクラスを作成します。

コールバックを購読する場合は、そのフィールドセットを持つそのクラスのインスタンスを作成し、そのインスタンスのコールバックにコールバックを設定します。

例:

class Temp 
{ 
    public Tween Tween1; 

    public void RewindCallback() 
    { 
     // Execute some code after Tween is completed 
    } 
} 

と使用方法:

Temp temp; 
public Tween Play(Tween tweenToPlay) 
{ 
    temp = new Temp { Tween1 = tweenToPlay }; 
    return tweenToPlay.Play().OnComplete(temp.RewindCallback); 
} 
関連する問題