什么是回调,它在c#中是如何实现的?
当前回答
回调函数是在流程执行完特定任务时调用的函数。
回调的使用通常是在异步逻辑中。
要在c#中创建回调,需要在变量中存储函数地址。这是使用委托或新的lambda语义Func或Action实现的。
public delegate void WorkCompletedCallBack(string result);
public void DoWork(WorkCompletedCallBack callback)
{
callback("Hello world");
}
public void Test()
{
WorkCompletedCallBack callback = TestCallBack; // Notice that I am referencing a method without its parameter
DoWork(callback);
}
public void TestCallBack(string result)
{
Console.WriteLine(result);
}
在今天的c#中,这可以使用lambda来完成:
public void DoWork(Action<string> callback)
{
callback("Hello world");
}
public void Test()
{
DoWork((result) => Console.WriteLine(result));
DoWork(Console.WriteLine); // This also works
}
其他回答
定义
回调是可执行的代码 作为参数传递给其他代码。
实现
// Parent can Read
public class Parent
{
public string Read(){ /*reads here*/ };
}
// Child need Info
public class Child
{
private string information;
// declare a Delegate
delegate string GetInfo();
// use an instance of the declared Delegate
public GetInfo GetMeInformation;
public void ObtainInfo()
{
// Child will use the Parent capabilities via the Delegate
information = GetMeInformation();
}
}
使用
Parent Peter = new Parent();
Child Johny = new Child();
// Tell Johny from where to obtain info
Johny.GetMeInformation = Peter.Read;
Johny.ObtainInfo(); // here Johny 'asks' Peter to read
链接
c#的更多细节。
在计算机编程中,回调是作为参数传递给其他代码的可执行代码。 -维基百科:Callback(计算机科学)
c#有为此目的的委托。它们被大量用于事件,因为一个事件可以自动调用许多附加的委托(事件处理程序)。
回调是传递给另一个函数的函数指针。你正在调用的函数将在另一个函数完成时“回调”(执行)。
查看这个链接。
可能不是字典定义,但回调通常是指一个函数,它位于特定对象的外部,被存储,然后在特定事件时调用。
例如,当创建一个UI按钮时,它存储了对执行某个操作的函数的引用。该操作由代码的不同部分处理,但当按下按钮时,将调用回调,这将调用要执行的操作。
c#使用“事件”和“委托”而不是“回调”这个术语,你可以在这里找到更多关于委托的信息。
我才刚认识你, 这很疯狂, 这是我的number (delegate) 所以如果发生了什么(事件), 打给我吧(回电话)?
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?