2017-10-17 47 views
4

我很確定這是可能的(至少在java中是這樣),我是C#初學者。C#初學者 - 在同一函數中回調

所以我有一個函數,其中包括一個回調(通知其他方法,一些工作完成)。

我不想調用另一個函數,因爲我失去了一個參數(並且不能在回調函數中傳遞參數)。我該如何做同樣的功能?

我現在正在做什麼:

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

太好了!我可以看到這也叫做lambda表達式?匿名方法和lambda表達式有什麼區別? – rootpanthera

+0

lambda表達式基本上是一個'Func '或'Action '這是通用代理,而匿名方法只是一個沒有名字的方法 –

14

你的意思是lambda表達式,這樣的嗎?

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

匿名/ lambda表達式寫得較短,但根據複雜性 - 您可能想要使用一個完整的類,如下所示。

用該變量的字段和適當的回調函數創建一個類。

當您想要訂閱回調 - 使用該字段集創建該類的實例,並將回調設置爲該實例中的回調。

例子:

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