动态装载和使用类型

动态装载和使用类型
作者:微软中国有限公司    
Reflection提供诸如Microsoft Visual Basic.NET和JScript语言编译器使用的底层结构来实施隐性后绑定。绑定是定位与某一特定类型相对应的声明的过程。当这个过程发生在运行的时候,而不是编译的时候,它被称为后绑定。Visual Basic.NET使你可以在你的代码中使用隐性后绑定;VisualBasic.NET编译器调用helper 方法,使用Reflection获得对象类型。传递给helper 方法的参数 使适当的方法可以在运行时被调用。这些参数是调用方法(对象)的实例,被调用方法的名字(字符串),及传递给被调用方法的参数。(一个对象数组)。
在以下代码例子中, Visual Basic.NET编译器通过Reflection隐性地 来对一在编译时不知类型的对象调用方法。HelloWorld 类有一种 PrintHello 方法,可以打印出"Hello World" 及传递给PrintHello 方法的一些文本。本例中PrintHello 方法 调用实际上是Type. InvokeMember ; Visual Basic 代码 允许PrintHello 方法被调用,仿佛 对象的类型 (helloObj)在编译时就已经知道了(前期绑定),而不是在运行时(后绑定)。
[Visual Basic]
Imports System
Module Hello
Sub Main()
' Set up variable.
Dim helloObj As Object
' Create the object.
helloObj=new HelloWorld()
' Invoke the print method as if it was early bound
' even though it's really late bound.
helloObj.PrintHello("Visual Basic Late Bound")
End Sub
End Module
自定义绑定
Reflection除了可以隐性地被编译器用于后绑定,也可以在代码中显示使用,来完成后绑定。
common language runtime 支持多种编程语言,这些语言的绑定规则互不相同。在前绑定的情况下,代码生成器能完全控制绑定。然而,在使用Reflection的后绑定中,绑定必须由自定义绑定控制。Binder类提供成员选择与调用的自定义控制。

时间: 2024-09-19 18:44:27

动态装载和使用类型的相关文章

如何取得动态装载的WEB CONTROL的属性值?

web|动态 我有一个页面,动态装载两个控件,txtQuestion1 和txtQuestion2,其中的 1, 2是由一个数组中的值来确定的:装载方法如下:            for (int i=0;i<=arrLang.GetUpperBound(0);i++)            {                TextBox myTextBox1 = new TextBox();                myTextBox1.ID = "txtQuestion&qu

easyui的tree控件动态加载树类型

问题描述 easyui的tree控件动态加载树类型 这个真不会写了高人帮看看 实现树类型 附有数据库表 后台用c#的一般处理程序 前台怎么传节点 等等 写的时候帮我写点注释.感激不尽!!! 解决方案 .................. 解决方案二: http://blog.csdn.net/hzw2312/article/details/38919877 C#不太清楚,java的话能帮你

一个用Class.forName()做的动态装载小东东,有助于理解Class.forName()的应用

动态 一直都在连JDBC中用到Class.forName(),当用到XML动态解析分派的时候遇到了Class名字符串无法作为Class名实例化的问题,寻寻觅觅终于找到一个解决的办法:public class DynamicLoader{    public static void main(String args[]) throws Exception{        Class toRun = Class.forName(args[0]);        String[] newArgs=sc

动态SQL四种类型的语句格式

动态|语句 1.Dynamic SQL Format 1 EXECUTE IMMEDIATE SQLStatement     {USING TransactionObject} ; eg:string            MysqlMysql = "CREATE TABLE Employee "&    +"(emp_id integer not null,"&    +"dept_id integer not null, "

c#中动态装载dll

记得很久前有个人让我解决这么一个事情,他的一个c动态连接库里面有个静态变量,每次调用这个方法的时候,就自动增加,他想在特定的时候,为了恢复这个静态变量的初值,动态卸了这个动态库,然后重新加载.(该动态库不能改动) c#里面要用到动态库,需要使用DllImport,但是这个是全局的东西,不能像动态load/unload assembly所使用的AppDomain的方法. 这样就想到了API: LoadLibrary, GetProcAddress, 和FreeLibrary方法. [DllImpo

如何动态的为导入类型绑定\指定\添加元数据?

问题描述 如有publicclassStudent{publicintage;}如何在反射中为Student添加元数据,变成:publicclassStudent{[DisplayName("年龄")]publicintage;}添加的元数据DisplayName是在外部动态添加的 解决方案 解决方案二:用IOC做切面编程

用 .NET 实现插件机制

  .NET 提供的反射(Reflection)机制可以很方便的加载插件.本文提供一种方法,可以灵活的正确的载入所需的插件.在.NET中,一个完整的类型名称的格式如 "类型名, 程序集名". 例如:"System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089". 类型名为:Syste

深入Java虚拟机——类型装载、连接(转)

来自http://hi.baidu.com/holder/item/c38abf02de14c7d31ff046e0     Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用.其中,装载就是把二进制形式的Java类型读入Java虚拟机中:而连接就是把这种已经读入虚拟机的二进制形式的类型数据合并到虚拟机的运行时状态中去.连接阶段分为三个子步骤--验证.准备和解析."验证"步骤确保了Java类型数据格式正确并且适于Java虚拟机使用而&quo

转 解析JDK 7的动态类型语言支持

Java虚拟机的字节码指令集的数量自从Sun公司的第一款Java虚拟机问世至JDK 7来临之前的十余年时间里,一直没有发生任何变化[1].随着JDK 7的发布,字节码指令集终于迎来了第一位新成员--invokedynamic指令.这条新增加的指令是JDK 7实现"动态类型语言(Dynamically Typed Language)"支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备.在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义. 动