方式一、用委托作为形参,把结果传回实参
方式二、通过接口实现
方式三、通过事件关联,适用桌面应用程序
方式四、子窗体调用父窗体的函数(委托)


方式一、用委托作为形参,把结果传回实参

public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Child chld = new Child();
chld.GetURL((url) =>
{
Response.Write(url);
//取得结果:http://microsoft-zh.cn
});
}
}
public class Child
{
//创建委托
public delegate void GetURLDelegate(string url);
public void GetURL(GetURLDelegate func)
{
func("http://microsoft-zh.cn");
}
}

 方式二、通过接口实现

public partial class index : System.Web.UI.Page, ILoginCallback
{
protected void Page_Load(object sender, EventArgs e)
{
Child chld = new Child();
chld.GetURL(this);
}
public void OnGetURL(string url)
{
Response.Write(url);
//取得结果:http://microsoft-zh.cn
}
}
public class Child
{
public void GetURL(ILoginCallback callback)
{
callback.OnGetURL("http://microsoft-zh.cn");
}
} public interface ILoginCallback
{
/// <summary>
/// 接口函数
/// </summary>
void OnGetURL(string url);
}

方式三、通过事件关联,适用桌面应用程序

public partial class Form1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ } Form2 chld = new Form2();
protected void Button1_Click(object sender, EventArgs e)
{
chld.AuthReady += new AuthEventHandler(chld.OnAuthReady);
}
}
public partial class Form2 : System.Web.UI.Page
{
// 事件
public event AuthEventHandler AuthReady;
protected void Button2_Click(object sender, EventArgs e)
{
if (AuthReady != null)
{
AuthEventArgs args = new AuthEventArgs();
args.user_id = 1;
args.user_name = "micro";
AuthReady(this, args);
}
}
public void OnAuthReady(object sender, AuthEventArgs e)
{
Console.Write(e.user_name);
}
}
//委托事件
public delegate void AuthEventHandler(object sender, AuthEventArgs e);
public class AuthEventArgs : EventArgs
{
public int user_id { get; set; }
public string user_name { get; set; }
}

方式四、子窗体调用父窗体的函数(委托)
1、子窗体Form2

public partial class Form2 : Form
{
// 申明委托,与父窗体方法类型相同
public delegate string FunDelegate(int a);
// 用来接收父窗体方法的委托变量
public FunDelegate funDelegate;
private void button1_Click(object sender, EventArgs e)
{
if (funDelegate != null)
{
// 调用方法
funDelegate(2);
}
}
}

2、父窗体Form1

private void Form1_Load(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
//父窗体的方法传给子窗体
frm2.FunDelegate = Fun;
frm2.Show();
}
// 父窗体的方法
private string Fun(int a)
{
return "我是主窗体方法";
}

  

  

 

C# Callback思维的更多相关文章

  1. 做一个有产品思维的研发:Scrapy安装

    每天10分钟,解决一个研发问题. 如果你想了解我在做什么,请看<做一个有产品思维的研发:课程大纲>传送门:https://www.cnblogs.com/hunttown/p/104909 ...

  2. vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)

    vue源码业余时间差不多看了一年,以前在网上找帖子,发现很多帖子很零散,都是一部分一部分说,断章的很多,所以自己下定决定一行行看,经过自己坚持与努力,现在基本看完了,差ddf那部分,因为考虑到自己要换 ...

  3. 前端面试送命题(二)-callback,promise,generator,async-await

    前言 本篇文章适合前端架构师,或者进阶的前端开发人员:我在面试vmware前端架构师的时候,被问到关于callback,promise,generator,async-await的问题. 首先我们回顾 ...

  4. PowerBuilder编程新思维2:嵌入(Thread多线程)

    PowerBuilder编程新思维2:嵌入(Thread多线程) 在PB中使用多线程,在网上有大量的文章介绍.不过深入研究并试着给出更易用的模型的,目前还只有"路人甲cw"的一篇& ...

  5. 对比jQuery和AngularJS的不同思维模式

    jQuery是dom驱动,AngularJS是数据驱动,这里有一篇文章阐述的非常好,建议看看 本文来自StackOverFlow上How do I “think in AngularJS” if I ...

  6. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  7. 原生JS中 callback,promise,generator,async-await 的简介

    callback,promise,generator,async-await 的简介 javascript异步的发展历程. ES6 以前: 回调函数(callback):nodejs express ...

  8. 2019年Java并发精选面试题,哪些你还不会?(含答案和思维导图)

    Java 并发编程 1.并发编程三要素? 2.实现可见性的方法有哪些? 3.多线程的价值? 4.创建线程的有哪些方式? 5.创建线程的三种方式的对比? 6.线程的状态流转图 7.Java 线程具有五中 ...

  9. 18道kafka高频面试题哪些你还不会?(含答案和思维导图)

    前言 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处 ...

随机推荐

  1. python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)

    一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...

  2. JavaScript中函数的继承

    大多OOP语言都支持两种继承方式: 接口继承和实现继承 ,而ECMAScript中无法实现接口继承,ECMAScript只支持实现继承,而且其实现继承主要是依靠 原型链 来实现. 1.原型链 基本思想 ...

  3. 【转】角落的开发工具集之Vs(Visual Studio)2017插件推荐

    因为最近录制视频的缘故,很多朋友都在QQ群留言,或者微信公众号私信我,问我一些工具和一些插件啊,怎么使用的啊?那么今天我忙里偷闲整理一下清单,然后在这里面公布出来. Visual Studio 201 ...

  4. Using jconsole to connect to JMX on AS7

    Using jconsole to connect to JMX on AS7 https://developer.jboss.org/wiki/UsingJconsoleToConnectToJMX ...

  5. canvas简单下雨特效

    前面做了两个简单的效果,这次就来个下雨的效果 思路简单的说一下 随机在屏幕中的位置画雨滴,moveTo(x,y) 雨滴的长度就是lineTo(x,y+len) 每次重新绘制页面,就能达到下雨的效果了 ...

  6. Codeforces 757D - Felicity's Big Secret Revealed

    757D - Felicity's Big Secret Revealed 题目大意:给你一串有n(n<=75)个0或1组成的串,让你划最多n+1条分割线,第一条分割线的前面和最后一条分割线的后 ...

  7. docker swarm学习命令

    引用自:https://blog.csdn.net/wanglei_storage/article/details/77508620 引用自:https://www.cnblogs.com/wj563 ...

  8. 启动Azure模拟器出错解决方案

    错误弹窗: 输出控制台: Microsoft Azure Tools: Warning: Overriding public port 80 to 2888 in role 'WebRole1'. M ...

  9. Wamp修改端口

    WAMP装好之后默认的端口是80,但是这个80端口呢,可以热门端口啊,迅雷,IIS都挺喜欢,在WIN7下本来还有1个进程也点80,让人伤脑筋啊,所以把它改掉,方法如下: 一.修改APACHE的监听端口 ...

  10. Outlook错误代码

    一般错误1 0x80004005 MISC The operation failed Virus Scanner Integration Issue Usually Related To Script ...