对委托内部机制的研究(补完篇)

JSP学习笔记一 一、Servlet响应页面的问题 二、JSP(Java Server Pages) 2.1 概念 2.2 作用 三、JSP开发(重要) 3.1 创建JSP 3.1.1 JSP编写Java代码 3.1.2 访问JSP 3.2 JSP与Servlet 3.3 JSP实现原理 3.3.1 JSP.java源文件存放目录 四、JSP与HTML集成开发 4.1 脚本 4.1.1 普通脚本 4.1.2 声明脚本 4.1.3 输出脚本 4.2 JSP注释 4.2.1 语法规则 4.2.2 注释示例 4.3 JSP指令 阅读详情

  之前我对委托的认识,只是停留在简单的定义委托,实例化委托,绑定方法等基本操作。

  随着现在对.net的深入学习(尤其在了解.net中的反射机制后),慢慢的对委托的内部运行机制也有了一定的了

解。把它写在我的博客上,一方面能与同行交流,同时也当做是对自己掌握的知识的一种归纳总结。

  切入正题。

  首先要明白的是,Delegate实质是一个类(很废话,不要骂我)。我们在实际运用当中,就是创造一个继承它的

委托类。在使用这个委托的时候,就是调用它继承于父类(即Delegate类)的方法来实现。这里我们主要是要了解

它的两个构造函数和两个属性以及一个Invoke方法。

  先看两个构造函数:

    protected Delegate(Type target,String method); 

    
protected Delegate(object target,String method);

 

  第一个构造函数是当绑定的方法为静态方法时用的,这里我们以第二种,当绑定非静态方法时所用的构造函数为

例来讲解。target是表示绑定方法所在的类的实例(如果是静态方法,则调用第一个构造函数,target参数就是表示

 

方法所在的类),method就是所绑定方法的方法名。这与我们平时初始化委托所用的构造函数不同,平时我们只

 

要传入一个完整的方法名做为参数即可。这是因为上面的这两种构造函数都是不会直接用到的。当我们传入要绑定

 

的方法名时,.Net会自动根据传入的方法名来调动相应的构造函数,并且成生构函数的两个参数。

 

  举个例子:一个名为testDelegate的委托,绑定了Num对象中的一个Add方法。代码段如下:

       

Delegate int testDelegate(int num1,int num2);

public  class Number
{
    
public Number()
    
{ 
    
    }


    
public int Add(int num1,int num2)
    
{
        
return num1 + num2;
    }

}


Number Num 
= new Number();

testDelegate 
= new testDelegate(Num.Add);

 

  这时.Net会分析传入的参数Num.Add,判断它是一个非静态方法,调动第二个构造函数。然后再分析,得知该方

 

法是属于Num对象的,就将Num对象做为target参数;同样的,再将方法名“Add”(是个String类型数据)做method

  

参数。

 

   构造函数就讲到这。下面来看Delegate类的两个属性。

 

 

     //这个就是传入的target参数
     public object Target { get; }   

     
//这个是依据传入的method参数生成的对应绑定方法的MethodInfo类的对象。原理应该是利用反射机制。
     public MethodInfo Method { get; };  

 

  这里补充一下Method属性的获取方法,如下:

 

 

//target表示方法所在的对象或类,就是第一个参数
System.Type t = target.GetType();  

//method就是传入的方法名,GetMethod()方法就是通过方法名来返回所对应方法的MethodInfo对象
MethodInfo Method = t.GetMethod(method);  

 

 

  太晚了,明天继续写。

 

###################################################################################

 

  继续写。

 

  昨天写到Delegate的两个属性,今天接着写它的最重要的Invoke方法。

 

  Invoke方法,其实是上文中说到的Method属性的一个方法。Method是MethodInfo类的一个实例,MSDN上对它的

 

解释是:发现方法的属性 (Attribute) 并提供对方法元数据的访问。Method.Invoke(),就是对Method所表示的方法的

 

调用。它有两个参数,Object obj和 Object[] parameters。

  obj表示方法所处在的实例象,就是对应之前上面所讲的Target属性。如果方法是静态方法,则忽略这个参数,用

Null做为参数值。

 

   parameters表示方法的签名,即参数。我们要将原方法的参数类型转化成Object []类型,比如上文中的Num.Add

方法有两个int类型的参数num1,num2,则可以这转换:

 

int num1 = 1;
int num2 = 2;

Object [] o 
= {num1,num2};

  (PS:刚知道代码可以以这样的形式插入,真是方便)

  所以,我们平时调用的委托方法:

 testDelegate(); 

  就是通过调用:

        testDelegate.Method.Invoke(Target,o);

  来实现的。

  到这里差不多我了解的原理都讲完了。头一次写这么多字的技术文章,真是累啊。

 

 

  

 

JSP技术学习笔记与实践指南 JavaServer Pages (JSP) 是一种用于开发动态Web页面的技术。它允许开发者将Java代码嵌入到HTML页面中,服务器端解释执行这些代码,并将结果嵌入到响应中返回给客户端。JSP主要应用于MVC(模型-视图-控制器)架构中视图层的构建,它简化了Servlet的代码编写,使得开发者可以更容易地创建交互式Web应用程序。JSP动作元素是一组预定义的XML标签,用于简化Java对象在JSP页面中的操作。它们包括:useBean:用于在JSP页面中查找或创建JavaBean实例。 阅读详情

相关推荐

CST仿真实例001:圆极化平板天线仿真

CST仿真实例001:圆极化平板天线仿真实例

weixin_47638568的博客 1万+

[J2SE 1.5]逐渐挖掘Varargs

.article {padding:1em;background:white;}.abstract {padding:1em 1ex 1em 2em;}.author, .date {padding:0.5ex 0 0 0;}h1.title, h2.major, h3.minor, h3.listing { margin:1ex 2px 1ex;color:#0066CC

孙海涛的谈笑间 1万+

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 756

关于 method (Object ... params )

看公司的平台代码,看到这样一个方法 public DataSet query(String sql, Object... para){ //opreation }   Object... param 第一次看到这样的用法,难道这是公司自定义的数据类型? 在群里问了句谁知道? 一个新人过来,给我做了个事例,说这是java的新特性== 变长数组。 直接让我汗颜,自认为对java基础有较高掌...

qdpurple 619

ENVI与Sarscape协同处理哨兵一号数据的完整流程解析

本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。

weixin_29251131的博客 339

【OpenBMC 系列】4.启动流程 使用qume模拟ast2600-evb

1.安装openbmc适配的qume 2.启动bmc 3.使用bmc web

AiFool的博客 4459

Java可变参数Object... args

Java命名习惯一、习惯命名参考资料 一、习惯命名  程序员们约定俗成的一些好的变量命名。 命名 说明 clazz 因为class是一个保留关键字,所以不允许使用Class class,经常使用Class clazz或Class cls。 参考资料 ...

ZHENZHEN的博客 9934

从0开始,部署micro_ros+stm32f407+stm32cubeIDE

(5)安装依赖项rosdep时,必须处于创建的microros_ws中,因为里面有clone的src文件夹。(3)教程a中的安装docker不是必须的,取决于运行agent时是否想使用docker。(4)记得安装rosdep,并在以后的命令中将rosdep替换为rosdepc。4、运行agent,选择udp、tcp、can、串口,这里没有使用docker。(1)首先参考教程a安装虚拟机和ubuntu,注意版本选择22.04;(2)参考教程b部署micro_ros构建系统。二、安装和运行agent。

m0_37963053的博客 2234

Introduce Parameter Object (引入参数对象)

Introduce Parameter Object (引入参数对象)

七月的南方博客 1394

【汇编实战开发笔记】一段汇编代码如何“反编译”成C代码?

介绍了一种由汇编代码得到C代码的方法

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 1万+

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

perseverance51博客 2893

jsp学习笔记

@TOCjsp学习笔记 jsp学习笔记 这里是引用

wc_12345654321的博客 266

FPGA发展趋势:异构计算、AI加速、可重构计算

FPGA技术正朝着异构计算、AI加速和可重构计算三大方向发展。作为高效能计算平台,FPGA在异构架构中与CPU/GPU协同工作,发挥低延迟、高能效优势;在AI领域通过定制化架构实现边缘推理加速;其硬件可重构特性支持动态适应多样化计算需求。最新进展包括部分可重构技术、智能网卡和边缘AI应用。未来,FPGA将在自适应计算、量子接口和软件定义硬件等领域持续突破,成为异构计算架构的核心组件,推动硬件与软件的深度融合。性能对比显示FPGA在能效比(5-20TOPS/W)和灵活性方面具有显著优势。

2301_79143213的博客 969

JSP学习笔记(总结)

jsp

m0_65939803的博客 1592

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JSP 学习笔记

JSP  java server  page 1 配置开发工具 jdk   设置web服务器 Tomcat 2jsp生命周期  编译阶段:servlet容器编译servlet源文件,生成servlet类  初始化阶段:加载与jsp对应的servlet类,创建其实例,并调用它的初始化方法  执行阶段:调用与jsp对应的servlet实例的服务方法  销毁阶段:调用jsp对应的servle

qq_38767992的博客 410

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JSP第一章学习笔记

Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

2302_80445824的博客 827

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jsp2 tag学习笔记

JSP2.0标签学习笔记1. 说明本文档是学习tomcat中例子的笔记,并没有参考相应的说明文档,因此不能保证本文观点的正确性。如果有不对之处,不妨email至8280338@tzenet.com,大家共同进步。2. JSP2.0标签使用方法JSP2.0中标签的使用由多个部分组成:(1) WEB_INF/web.xml中添加标签引用(2) 标签的实现,可能是class也可能是web templet

jjhpp2003的专栏 1627

JSP标记学习笔记

  JSP标记学习笔记ginkou.fly  2002-9-181.  概述1)  什么是JSP标记顾名思义,JSP标记就是在JSP文件中使用的标记。它类似于html语法中的标记,像head 、table 。通过在JSP文件中引用它(就像使用html标记那样),可以更方便的实现对Java 代码模块的重用。2)  为什么要使用JSP 标记技术(与javabean相比)好处

itpride的专栏 1588

JSP学习笔记(九)-----JSP标签库

JSP学习笔记(九)-----JSP标签库本文章地址:http://tech.163.com/05/1025/17/20U6IQJE0009159F.html [点此复制地址]1.JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。它可以大大简化你在页面中输入各

xxxuehao的专栏 1161

Java Web学习笔记03:JSP元素

Java Web学习笔记03:JSP元素

Mr_qing的博客 143

JSP快速学习笔记(建议收藏)

JSP(JAVA服务端页面)快速学习笔记

Locus的博客 651

jsp大学生学习笔记管理系统的设计与实现zf119

潘丽芳,张大龙,李慧.基于用户的协同过滤(UserCF)新闻推荐算法研究[J].山西师范大学学报(自然科学版),2018,32(04):26-30.DOI:10.16207/j.cnki.1009-4490.2018.04.006.王崟,陆莉莉.从SSM进阶到Spring Boot课程的教学内容设计[J].电脑知识与技术,2022,18(26):163-166.DOI:10.14004/j.cnki.ckt.2022.1689.定义网页的结构和内容,如段落、链接、图片等。

ck3026的博客 1431

JSP第二章学习笔记

尝试将byte变量赋值为200,观察编译错误。

2302_80445824的博客 979

SpringBoot学习笔记(5)——SpringBoot整合jsp技术

SpringBoot学习笔记(5)——SpringBoot整合jsp技术 1. 创建项目 2. 修改pom文件,添加坐标 <dependencies> <!-- springBoot的启动器 --> <dependency> <groupId>org.springframework.boot</groupId&...

njsunll的博客 293
上一篇: 我对于“Tag”的理解
下一篇: 关于类的静态变量和非静态变量区别的一个研究例子
Anckly
博客等级 码龄20年 6粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值