当前位置:  开发笔记 > 编程语言 > 正文

C#中的回调

如何解决《C#中的回调》经验,为你挑选了2个好方法。

我希望有一个库中有一个函数,它接受一个对象的参数.

使用此对象,我希望能够在X完成时调用指定的函数.将被调用的函数由调用者指定,并且X将由库完成并监视.

我怎样才能做到这一点?

作为参考,我使用的是C#和.NET 3.5



1> bendewey..:

提供委托并使用匿名委托或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(Action 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));
}



2> Jon Skeet..:

听起来像代表的完美配方 - 特别是,与委托的回调正是如何在.NET中的异步模式中处理它.

调用者通常会传递一些状态和一个委托,并将它们存储在你所拥有的任何上下文中,然后调用委托者传递状态和你可能拥有的任何结果.

您可以使状态正好object或可能使用泛型委托并采用适当类型的状态,例如

public delegate void Callback(T state, OperationResult result)

然后:

public void DoSomeOperation(int otherParameterForWhateverReason,
                            Callback callback, T state)

当您使用.NET 3.5时,您可能希望使用现有Func<...>Action<...> 委托类型,但您可能会发现它更清楚地声明您自己的类型.(该名称可能会使您更清楚地使用它.)


我建议你仔细阅读代表(以及可能的泛型).我关于代表和证据的文章位于http://pobox.com/~skeet/csharp/events.html
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有