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

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";
}
}

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

Java的自定义接口

定义接口的类(HuangLiMonthActivity):

//定义接口的类:

/*
* 声明一个接口
*/
public static YueLiClickListener yueLiClickListener; /*
* 设置接口侦听
*/
public static void setYueLiClickListener(YueLiClickListener clickListener) {
yueLiClickListener = clickListener;
} //在某个方法中绑定侦听
//绑定触发的事件-调用都实现这个方法以处理自身的逻辑
yueLiClickListener.OnClick(iyear, imonth, iday);

调用接口的类(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);

C#的委托与Java的自定义接口的异曲同工的同步操作的更多相关文章

  1. Java NIO Path接口和Files类配合操作文件

    Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...

  2. Java中 Comparator接口 与Comparable 的区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt159 comparator接口与Comparable接口的区别 1. Com ...

  3. 使用Java代码自定义Ribbon配置

    很多场景下,需要实现不同的微服务采用不同的策略,例如修改Ribbon的负载均衡规则等.Spring Cloud允许使用Java代码自定义Ribbon的配置. 在Spring Cloud中,Ribbon ...

  4. java中自定义注释@interface的用法

    一.什么是注释     说起注释,得先提一提什么是元数据(metadata).所谓元数据就是数据的数据.也就是说,元数据是描述数据的.就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义.而J ...

  5. JNI的又一替代者—使用JNR访问Java外部函数接口(jnr-ffi)

    1. JNR简单介绍 继上文“JNI的替代者—使用JNA访问Java外部函数接口”,我们知道JNI越来越不受欢迎,JNI是编写Java本地方法以及将Java虚拟机嵌入本地应用程序的标准编程接口.它管理 ...

  6. java注解自定义使用

    Java提供了4种注解,专门负责新注解的创建: @Target: 表示该注解可以用于什么地方,可能的ElementType参数有:CONSTRUCTOR:构造器的声明FIELD:域声明(包括enum实 ...

  7. spring data 自定义接口

    1 spring data jpa 虽然说spring data 提供了很多DAO 接口,但是依然可能不能满足我们日常的使用,所以,有时我们需要自定义接口方法.自定义接口方法步骤如下: 1.  创建自 ...

  8. Java 线程--实现java.lang.Runnable接口实现线程

    Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步,写一个类实现ja ...

  9. java集合类型接口和实现类个人总结

    转载:http://blog.csdn.net/qingchunbusanchang/article/details/39576749 java的集合是一个比较综合的概念,相关的知识有很多的博客里面做 ...

随机推荐

  1. javascript第一天知识点

    JS的数据类型: 数字  number 字符串 string 布尔 boolean 空值 null 未定义的 undefined 数组 Array 对象 Object 通过typeof() 可以查看对 ...

  2. webpack.base.conf.js

    var path = require('path')var utils = require('./utils')var config = require('../config')var vueLoad ...

  3. IEDriver executable needs to be available in the path

    解决办法: 去http://selenium-release.storage.googleapis.com/index.html 下载指定IE版本 解压后 拷贝到Python的目录下 重新运行,提示错 ...

  4. Linux后台运行进程

    方式一: /bin/bash /var/www/html/crontab.sh & 缺点:终端关闭的话,进程也会关闭. 方式二: nohup /bin/bash /var/www/html/c ...

  5. rbac集成 权限分配。之用户管理

    流程都是一样的.就不在详细的记录.只写一点需要注意的地方! 或者 可以改进的地方! 1. 用户表中 只有. name  password email 三个字段. 但是添加用户的页面,应该还要有确认密码 ...

  6. 解决video标签在微信中强制全屏、微信全屏播放(Android和IOS)

    在video标签中加上代码: x5-playsinline="true" webkit-playsinline="true" playsinline=" ...

  7. 转 java反射详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  8. 开源防火墙(pfSense)的安装部署与配置

    pfSense是一个基于FreeBSD架构的软件防火墙,通常会被安装在多网卡的主板上作为路由器或者防火墙去使用.往往这些硬件都比较廉价,高性能的配置也就1千元左右.pfSense具有商业防火墙的大部分 ...

  9. MyBatis Generator中文文档

    MyBatis Generator中文文档 MyBatis Generator中文文档地址: http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看 ...

  10. Luogu 1764 翻转游戏 - 枚举 + 搜索

    题目描述 kkke在一个n*n的棋盘上进行一个翻转游戏.棋盘的每个格子上都放有一个棋子,每个棋子有2个面,一面是黑色的,另一面是白色的.初始的时候,棋盘上的棋子有的黑色向上,有的白色向上.现在kkke ...