zoukankan      html  css  js  c++  java
  • 早期绑定、动态绑定、后期绑定

    早期绑定、动态绑定、后期绑定
          这里所说的绑定并不是指对一个控件的数据绑定。这种绑定是指与类之间建立某种联系的过程,比如在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的。
           最后我们来看看这两者分别用在什么地方。就大多数程序来说,一般都应该使用“早期绑定”,因为很显然它的性能要高一些。而“后期绑定”应该用在特殊的地方,比如在程序中可以调用插件,这必然是需要“后期绑定”的。在破解上“反射注册机”的编写也需要“后期绑定”,编写解释性语言也需要“后期绑定”。因此可见“后期绑定”在对程序集的处理上更加的灵活。
  • 相关阅读:
    NET5 ORM 六大新功能
    牛逼程序员必须要掌握金字塔思维
    实体类转Json的2种方法
    怎么使用jquery阻止页面的离开或卸载
    GitHub的用法:到GitHub上部署项目
    搭建个人服务器
    远程服务器上部署本地项目
    java.nio.ByteBuffer中flip,rewind,clear方法的区别
    eclipse Run On Server 异常:could not load the Tomcat Server configuration at Servers omcat V5.0 Sertomcat
    throw与throws的区别
  • 原文地址:https://www.cnblogs.com/chengchen/p/1222534.html
Copyright © 2011-2022 走看看