2017-10-17 32 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); 
}