曹永思

导航

C#的委托与Java的自定义接口的异曲同工的同步操作

C#的委托(以WinForm为例)

在子窗体(ChildFrm)中定义一个委托

            this.CaptureListener(callback);//子窗体触发委托事件,以告诉调用的窗体
 /// <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);//子窗体触发委托事件,以告诉调用的窗体            
        }

    }
View Code

Code By 博客园-曹永思

在主窗体(MainFrm)设置对子窗体委托的侦听

            //设置侦听,监视子窗体的指定委托,并指定委托子窗体的执行的方法
            frm.SetCaptureListener(new ChildFrm.CaptureListenEvent(CaptureInfo));
    /// <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";
        }
    }
View Code

=====================================================================

Java的自定义接口

定义接口的类(HuangLiMonthActivity):

//定义接口的类:

/*
     * 声明一个接口    
     */
    public static YueLiClickListener yueLiClickListener;
    
    /*
     * 设置接口侦听    
     */
    public static void setYueLiClickListener(YueLiClickListener clickListener) {
        yueLiClickListener = clickListener;
    }


        //在某个方法中绑定侦听
    //绑定触发的事件-调用都实现这个方法以处理自身的逻辑
    yueLiClickListener.OnClick(iyear, imonth, iday);
View Code

调用接口的类(HuangLiMonthPanelActivity):

//实现接口绑定的侦听事件
        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);
View Code

  

 

posted on 2014-03-28 17:56  曹永思  阅读(477)  评论(0编辑  收藏  举报