我希望有一个库中有一个函数,它接受一个对象的参数.
使用此对象,我希望能够在X完成时调用指定的函数.将被调用的函数由调用者指定,并且X将由库完成并监视.
我怎样才能做到这一点?
作为参考,我使用的是C#和.NET 3.5
提供委托并使用匿名委托或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")); }
或者使用界面
public static void DoWork(ActionprocessAction) { // 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)); }
听起来像代表的完美配方 - 特别是,与委托的回调正是如何在.NET中的异步模式中处理它.
调用者通常会传递一些状态和一个委托,并将它们存储在你所拥有的任何上下文中,然后调用委托者传递状态和你可能拥有的任何结果.
您可以使状态正好object
或可能使用泛型委托并采用适当类型的状态,例如
public delegate void Callback(T state, OperationResult result)
然后:
public void DoSomeOperation(int otherParameterForWhateverReason, Callbackcallback, T state)
当您使用.NET 3.5时,您可能希望使用现有Func<...>
和Action<...>
委托类型,但您可能会发现它更清楚地声明您自己的类型.(该名称可能会使您更清楚地使用它.)