早期绑定、动态绑定、后期绑定(转自:http://www.cnblogs.com/chengchen/archive/2008/06/15/1222534.html)

本文主要是介绍早期绑定、动态绑定、后期绑定(转自:http://www.cnblogs.com/chengchen/archive/2008/06/15/1222534.html),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


      这里所说的绑定并不是指对一个控件的数据绑定。这种绑定是指与类之间建立某种联系的过程,比如在CMD程序中要调用另外一个程序集中的类的方法:
在ConsoleApplication程序中:

using  System;
using  System.Collections.Generic;
using  System.Text;
using  ClassLibrary1;
namespace  ConsoleApplication1
{
    
class  Program
    
{
        
static   void  Main( string [] args)
        
{
            Class1 cls 
=   new  Class1();
            Console.Write(cls.Hello());
        }

    }

}

在Class1.Dll文件中

using  System;
using  System.Collections.Generic;
using  System.Text;
namespace  ClassLibrary1
{
   
public   class  Class1
   
{
        
public   string  Hello()
       
{
            
return   " Hello world " ;
        }

   }

}

        首先我们在CMD程序中引用了Class1然后对其进行实例化,最后再调用了Class1 的Hello() 方法。经过编译器编译后,这样的一个过程就已经写在程序集合里面了,像这种关系的建立叫做“早期绑定”。
相反,在Class1调用Class2 的方法时候并没有引用Class2那么这个过程就是“后期绑定”了。也就是说Class2对于Class1是完全未知的情况下被调用的。针对上面的程序我们这样修改:

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Reflection;
using  System.Windows.Forms;
namespace  ConsoleApplication2
{
    
class  Program
    
{
        
static   void  Main( string [] args)
        
{
            Assembly assembly 
=  Assembly.LoadFile(Application.StartupPath  +   " //ClassLibrary1.dll " );
            Type type 
=  assembly.GetType( " ClassLibrary1.Class1 " );
            MethodInfo methodInfo 
=  type.GetMethod( " Hello " );
            
object  obj  =  assembly.CreateInstance( " ClassLibrary1.Class1 " );
               Console.WriteLine(methodInfo.Invoke(obj,
null ));
        }

     }

}

      “动态绑定”则是指建立了部分联系,一般是在虚方法或抽象方法调用时,多态机制会在执行期间根据实际对象来确定要执行的代码。
      其实这里的绑定的定义并不是C#最先提出的,早在VB6.0时代,就有“早期绑定”和“后期绑定”之分,只不过在VB6.0中的定义要狭隘的多:只有当变 量被定义为Object 或 Variant 类型时候才属于“后期绑定”。同样很容易发现在解释执行的语言中没有“早期绑定”,而C#提供的“后期绑定”研究意味着使用C#开发一门解释型的语言也是 很easy的。
       最后我们来看看这两者分别用在什么地方。就大多数程序来说,一般都应该使用“早期绑定”,因为很显然它的性能要高一些。而“后期绑定”应该用在特殊的地 方,比如在程序中可以调用插件,这必然是需要“后期绑定”的。在破解上“反射注册机”的编写也需要“后期绑定”,编写解释性语言也需要“后期绑定”。因此 可见“后期绑定”在对程序集的处理上更加的灵活。

这篇关于早期绑定、动态绑定、后期绑定(转自:http://www.cnblogs.com/chengchen/archive/2008/06/15/1222534.html)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948792

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo