C#的委托(以WinForm为例)
在子窗体(ChildFrm)中定义一个委托
this.CaptureListener(callback);//子窗体触发委托事件,以告诉调用的窗体
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/// <summary> /// 子窗体:在子窗体中定义一个委托,供调用都设置侦听,并可与此窗体的某个事件同时执行自身指定的事件 /// 定义 委托 /// </summary> public partial class ChildFrm : Form { public ChildFrm() { InitializeComponent(); } /// <summary> /// 定义委托(同Java中的接口) /// </summary> /// <param name="callback">可以是任意类型</param> public delegate void CaptureListenEvent(string callback); /// <summary> /// 声明委托 ///from:博客园-曹永思http://www.cnblogs.com/yonsy/p/3631116.html /// </summary> public CaptureListenEvent CaptureListener = null; /// <summary> /// 调用者设置侦听 /// </summary> /// <param name="CaptureListener"></param> public void SetCaptureListener(CaptureListenEvent CaptureListener) { this.CaptureListener = CaptureListener; } /// <summary> /// 被侦听的窗体执行一个事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { WiteContent();// } /// <summary> /// 写入值 /// </summary> public void WiteContent() { string callback = richTextBox1.Text; //触发被侦听的委托 this.CaptureListener(callback);//子窗体触发委托事件,以告诉调用的窗体 //this.CaptureListener.Invoke(callback);//子窗体触发委托事件,以告诉调用的窗体 } }
Code By 博客园-曹永思
在主窗体(MainFrm)设置对子窗体委托的侦听
//设置侦听,监视子窗体的指定委托,并指定委托子窗体的执行的方法 frm.SetCaptureListener(new ChildFrm.CaptureListenEvent(CaptureInfo));
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/// <summary> /// 主窗体 /// 调用个关联子窗体 /// 设置子窗体中的侦听 /// </summary> public partial class MainFrm : Form { //子窗体 ChildFrm frm = new ChildFrm(); public MainFrm() { InitializeComponent(); //设置侦听,监视子窗体的指定委托,并指定委托子窗体的执行的方法 frm.SetCaptureListener(new ChildFrm.CaptureListenEvent(CaptureInfo)); } private void button1_Click(object sender, EventArgs e) { //打开子窗体 frm.Show(); } /// <summary> /// 子窗体触发委托事件时,主窗体同时会执行的方法 ///code by:博客园-曹永思 /// </summary> /// <param name="callback"></param> public void CaptureInfo(string callback) { richTextBox1.Text = richTextBox1.Text + callback + "\n"; } }
=====================================================================
Java的自定义接口
定义接口的类(HuangLiMonthActivity):
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//定义接口的类: /* * 声明一个接口 */ public static YueLiClickListener yueLiClickListener; /* * 设置接口侦听 */ public static void setYueLiClickListener(YueLiClickListener clickListener) { yueLiClickListener = clickListener; } //在某个方法中绑定侦听 //绑定触发的事件-调用都实现这个方法以处理自身的逻辑 yueLiClickListener.OnClick(iyear, imonth, iday);
调用接口的类(HuangLiMonthPanelActivity):
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
//实现接口绑定的侦听事件 YueLiClickListener clickListener = new YueLiClickListener() { @Override public void OnClick(int year, int month, int day) { // TODO Auto-generated method stub getRiLiData(year, month, day); mYear = year; mMonth = month; mDay = day; } }; //设置接口侦听 HuangLiMonthActivity.setYueLiClickListener(clickListener);