ben*_*wey 40
提供委托并使用匿名委托或Lambda表达式
public static void DoWork(Action processAction)
{
// do work
if (processAction != null)
processAction();
}
public static void Main()
{
// using anonymous delegate
DoWork(delegate() { Console.WriteLine("Completed"); });
// using Lambda
DoWork(() => Console.WriteLine("Completed"));
}
Run Code Online (Sandbox Code Playgroud)
或者使用界面
public static void DoWork(Action<string> processAction)
{
// do work
if (processAction != null)
processAction("this is the string");
}
public static void Main()
{
// using anonymous delegate
DoWork(delegate(string str) { Console.WriteLine(str); });
// using Lambda
DoWork((str) => Console.WriteLine(str));
}
Run Code Online (Sandbox Code Playgroud)
听起来像代表的完美配方 - 特别是,与委托的回调正是如何在.NET中的异步模式中处理它.
调用者通常会传递一些状态和一个委托,并将它们存储在你所拥有的任何上下文中,然后调用委托者传递状态和你可能拥有的任何结果.
您可以使状态正好object或可能使用泛型委托并采用适当类型的状态,例如
public delegate void Callback<T>(T state, OperationResult result)
Run Code Online (Sandbox Code Playgroud)
然后:
public void DoSomeOperation(int otherParameterForWhateverReason,
Callback<T> callback, T state)
Run Code Online (Sandbox Code Playgroud)
当您使用.NET 3.5时,您可能希望使用现有Func<...>和Action<...>
委托类型,但您可能会发现它更清楚地声明您自己的类型.(该名称可能会使您更清楚地使用它.)