C# 代理用法

delegate到底是什么东西

C语言总学过吧,如果你学得不像我那么差的话,函数指针总用过吧,就算没用过总听说过吧,嗯,大胆的告诉你,你完全可以把delegate理解成C中的函 数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作参数传递。不过delegate 和函数指针还是有点区别的,delegate有许多函数指针不具备的优点。首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可 以引用非静态成员函数。在引 用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与函数指针相 比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说,runtime能够保证delegate指向一个有效的方法, 你无须担心delegate会指向无效地址或者越界地址。

有什么能比举个例子更能说明问题呢,代码才是硬道理,来吧,看几个例子吧:

第一个例子:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


public
class
DelegateTest

{

     
// 声明delegate对象 

     
public
delegate
void
CompareDelegate(
int
a,
int
b);

     
// 欲传递的方法,它与CompareDelegate具有相同的参数和返回值类型 

     
public
static
void
Compare(
int
a,
int
b)

     
{

         
Console.WriteLine((a>b).ToString());

     
}

     
public
static
void
Main()

     
{

         
// 创建delegate对象 

         
CompareDelegate cd =
new
CompareDelegate(DelegateTest.Compare);

         
// 调用delegate 

         
cd(1,2);

     
}

}

再来一个例子:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19


public
delegate
void
MyTestDelegate(
int
i);

public
class
Program

{

    
public
static
void
Main()

    
{

        
//创建delegate

        
ReceiveDelegateArgsFunc(
new
MyTestDelegate(DelegateFunction));

    
}

    
//这个方法接收一个delegate类型的参数,也就是接收一个函数作为参数

    
public
static
void
ReceiveDelegateArgsFunc(MyTestDelegate func)

    
{

        
func(21);

    
}

    
//欲传递的方法

    
public
static
void
DelegateFunction(
int
i)

    
{

        
System.Console.WriteLine(
"传过来的参数为: {0}."
, i);

    
}

}

时间: 2024-10-21 05:19:39

C# 代理用法的相关文章

Spring AOP中的动态代理

0  前言 1  动态代理 1.1 JDK动态代理 1.2 CGLIB动态代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的过滤功能 2  Spring AOP中的动态代理机制 2.1 JdkDynamicAopProxy 2.2 CglibAopProxy 3 总结 0  前言 前一个季度旅游TDC的Thames服务有几次宕机,根据组内原因认真查找发现是数据库事务造成的,后来把服务中的事务配置全部去掉,服务恢复正常.根据这次教训,虽然现在还是很难确定是哪一个方面的真正原因,但是激

Squid介绍及透明代理完整部署

Squid 缓存服务 1.缓存服务器结束 缓存服务器(cache server),即用来存储(介质为内存及硬盘)用户访问的网页.图片.文件等等信息的专用服务器,这种服务器不仅可以使用户可以最快的得到他们想要的信息,而且可以大大减少服务端网络传输的数据量,缓存服务器往往也是代理服务器,对于网站的用户来说,缓存服务器和代理是不可见的,即在用户看来所有的网站信息都是来自其正在访问的网站,而实际上可能是缓存服务器在提供访问数据 目前国内互联网公司常用的缓存服务器有:squid.varnish.nginx

iOS 从某个页面返回然后刷新当前页面

-------->不说废话 在返回页面实现下面方法: - (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated: 注意:需要遵循UINavigationControllerDelegate,并使本类成为代理 用法: - (void)navigat

centos 7 k8s v1.7 v1.6 搭建记

K8s  V1.6   V1.7 部署 一.基础环境 1.主机名 IP  hosts 配置 主机名 IP 系统 k8s.master 192.168.1.44 CentOS 7 64 k8s.node1 192.168.1.45 CentOS 7 64 k8s.node2 192.168.1.46 CentOS 7 64 K8s.node3 192.168.1.47 CentOS 7 64 二.基础软件环境 1.关闭防火墙 systemctl stop firewalld.service &&am

爬虫之request模块

爬虫之request模块 request简介 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求 #安装:pip3 install requests #各种请求方式:常用的就是requests.get()和requests.post() >>> import

Java EE开发平台随手记5——Mybatis动态代理接口方式的原生用法

为了说明后续的Mybatis扩展,插播一篇广告,先来简要说明一下Mybatis的一种原生用法,不过先声明:下面说的只是Mybatis的其中一种用法,如需要更深入了解Mybatis,请参考官方文档,或者研读源码. 我们知道,使用Mybatis的方式有很多种,从是否集成上分,可以单独使用,也可以和Spring集成使用:从使用方式上分,可以编写静态工具类,在静态工具中调用SqlSession,也可以直接注入SqlSession/ SqlSessionTemplate,还可以编写Dao接口,让mybat

ssh-agent代理的简单用法

前言 在ansible的官方文档中,提到了强烈推荐用ssh-agent来管理密钥 究竟ssh-agent是什么,它有什么用法呢,下面来一探究竟. ssh-agent是什么?用处是什么? ssh-agent是什么? ssh-agent是一个代理程序,它能帮助我们管理我们的私钥. ssh-agent在哪里用得到? 当我们的主机有多个密钥对(例如:root用户生成了一对公钥私钥对,hmk用户生成了另外一对公钥私钥对),我们连接到其他不同的多台主机时,可能用的认证用户不一样,这时候需要我们手动指定使用哪

学习笔记之-------UIScrollView 基本用法 代理使用

//contentSize.contentInset和contentOffset 是 scrollView三个基本的属性. // 滚动 self.ScrollView.contentSize =self.imageview.frame.size; //偏移X =0 Y =-74 向下偏移 self.ScrollView.contentOffset =CGPointMake(0,-74); // 边距 距离顶部74 左 0 下40 右0 self.ScrollView.contentInset =

axios的详细用法以及后端接口代理

安装 使用 npm: $ npm install axios 或者 使用 bower: $ bower install axios 或者直接使用 cdn: <script src="https://unpkg.com/axios/dist/axios.min.js"></script> main.js设置如下 引入axios import axios from 'axios' 挂载到vue的原型 Vue.prototype.$http = axios 在webp