如何实现回调 看了半天没有明白

bborn 2006-10-18 09:47:02
classA
{
Adosomething()
{}
main()
{
classB = new classB
classB.dosomething();
}
}

classB
{
dosomething()
{
// callback Adosomething
}

}
我的意思是这样 在A类中新建一个B的实例,然后调用B的dosomething函数
我想在B的dosomething 调用 A的 Asomething 函数
请问这个该怎么做
...全文
105 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bborn 2006-10-18
  • 打赏
  • 举报
回复
多谢哦
用委托搞定了
一直学习 2006-10-18
  • 打赏
  • 举报
回复
就是这么回事,以上两位都说的很清楚了。
lxwin01 2006-10-18
  • 打赏
  • 举报
回复
举个最简单的例子吧
我要处理数据,但是处理方式可能不一样.
IUserCallBackHander
{
UserInfo Processor(SqlDataReader reader);
}

public class User
{
UserInfo FindUser(IUserCallBackHander hander)
{
//打开数据库连接
UserInfo info=hander.Processor(reader);
//关闭数据库连接
return info
}
}

怎么实现数据的处理完全你来定制,反正返回一样是我要的UserInfo,不仅这样.在打开和关闭在一个方法中完成是相对完全的你不会在其它方法中去处理可以遗忘的连接.
当然这只是一个简单的例子,在很多应用中都有.
aafshzj 2006-10-18
  • 打赏
  • 举报
回复
呵呵,原来的代码就有语法错误,我只是增加了callback相关代码而已。
www_123du_com 2006-10-18
  • 打赏
  • 举报
回复
sorry,更正如下,如果编译不过,自己再改一下:
www_123du_com 2006-10-18
  • 打赏
  • 举报
回复
sorry,更正如下,如果错误不过,自己再改一下:

//委托
public delegate void SomeCallback();
class classA
{
void Adosomething()
{
//can do anything
}
static void main()
{
classB b = new classB();
b.dosomething(new SomeCallback(Adosomething));
}
}

class classB
{
void dosomething(SomeCallback callback)
{
if (callback != null)
{
callback();
}
}
}

//or接口:
interface ABC
{
void Adosomething();
}
class classA : ABC
{
void Adosomething()
{
//can do anything
}
static void main()
{
classB b = new classB();
b.dosomething(this);
}
}

class classB
{
void dosomething(ABC abc)
{
abc.callback();
}
}
www_123du_com 2006-10-18
  • 打赏
  • 举报
回复
//委托
public delegate void SomeCallback();
classA
{
Adosomething()
{
//can do anything
}
main()
{
classB = new classB
classB.dosomething(new SomeCallback(this.Adosomething));
}
}

classB
{
dosomething(SomeCallback callback)
{
if (callback != null)
{
callback();
}
}
}

//or接口:
interface ABC
{
Adosomething();
}
classA : ABC
{
Adosomething()
{
//can do anything
}
main()
{
classB = new classB
classB.dosomething(this);
}
}

classB
{
dosomething(ABC abc)
{
abc.callback();
}
}
bborn 2006-10-18
  • 打赏
  • 举报
回复
还是有些不明白

语法上有些错误
bborn 2006-10-18
  • 打赏
  • 举报
回复
哦 刚没有看到

aafshzj 2006-10-18
  • 打赏
  • 举报
回复
你还真没说错,因为接口引用本身也类似指针,只不过是约定了若干个(在这里聚集成一个)调用签名的指针。
bborn 2006-10-18
  • 打赏
  • 举报
回复
在这里通过delegate怎么写了

这样看着和vc里传函数指针一样了
aafshzj 2006-10-18
  • 打赏
  • 举报
回复
你可以把delegate看作是只有一个方法的接口,回调的根本意义在于:

别人实现我规定的协议并通知我,我就根据协议调用它。
aafshzj 2006-10-18
  • 打赏
  • 举报
回复
public delegate void SomeCallback();
classA
{
Adosomething()
{}
main()
{
classB = new classB
classB.dosomething(this.Adosomething);
}
}

classB
{
dosomething(SomeCallback callback)
{
if (callback != null)
{
callback();
}
}

}




欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。


110,531

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧