当对象分配给对象变量时,编译器执行称为绑定的进程。C#执行两种不同类型的绑定:早期绑定和后期绑定。下面本篇文章就来带大家认识一下这两种绑定,希望对大家有所帮助。

早期绑定

早期绑定也称静态绑定,是指编译时绑定;早期绑定对象基本上是强类型对象或静态类型对象。【教程推荐:C#视频教程】

早期绑定在编译期间识别并检查方法、属性、函数,并在应用程序执行之前执行其他优化。在这个绑定中,编译器已经知道它是什么类型的对象以及它拥有的方法或属性。

早期绑定的优点

1、性能很快

2、易于编码、开发

3、减少了运行时错误的数量

示例:

using System;   class People {       // data members     public string name;     public string subject;       // public method     public void details(string name, string subject)     {         this.name = name;         this.subject = subject;         Console.WriteLine("我的名字是: " + name);         Console.WriteLine("我最喜欢的科目是: " + subject);     } }   class GFG {       // Main 方法    static void Main(string[] args)     {           // 创建People类的对象        People g = new People();           // 调用People类的方法         g.details("Ankita", "C#");           // 调用“myMethod()”时出错        // 因为这个方法不属于People类,或者编译器在编译时不知道mymethod()        g.mymethod();     } }

编译时发生错误:

1548918996280237.jpg

说明:在上面的示例中,我们有一个名为People的类。该类包含details()方法。这里,编译器已经知道People中存在的属性和方法。但是当我们尝试调用mymethod()时,它会抛出一个错误,因为编译器不知道这个方法。

后期绑定

后期绑定也称动态绑定。在后期绑定中,编译器不知道它是什么类型的对象以及它拥有的方法或属性,这里的对象是动态对象。对象的类型是根据它在运行时在右侧保存的数据来确定的。基本上,是通过使用虚拟方法来实现后期绑定。

后期绑定的最大优点是这种类型的对象可以保存对任何对象的引用,但缺少早期绑定对象的许多优点。比如:后期绑定的性能比早期绑定慢,因为它需要在运行时进行查找。

示例:

using System;   class GFG {     static void Main()     {         // Dynamic objects         dynamic obj = 4;         dynamic obj1 = 5.678;           // 显示对象的类型        Console.WriteLine("对象类型为:");           // 使用getType()方法来获取类型        Console.WriteLine(obj.GetType());         Console.WriteLine(obj1.GetType());     } }

输出:

3.jpg

说明:

在上面的示例中,obj保存整数类型数据,obj1保存双类型数据。但是编译器不会在编译时解决这些问题。在运行时,这些动态对象分别被检测并转换为System.Int32和System.Double。这就是为什么运行时解析过程被称为后期绑定的原因。

更多相关文章

  1. 在C++中对象如何作为参数传递和返回?(代码示例)
  2. C#学习之面向对象如何调用类以及普通方法、静态方法的使用
  3. c++是面向对象还是面向过程?
  4. 逻辑运算符两侧运算对象的数据类型是什么?
  5. golang 是面向对象的么
  6. Golang 是面向对象还是面向过程?
  7. golang是面向对象吗?
  8. Java对象的强、软、弱和虚引用
  9. XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象

随机推荐

  1. 1-22
  2. 动画:面试必刷之二叉树的子结构
  3. 详解 centos7设置nfs文件共享 实操记
  4. 2020 总结 | VoltDB的亮点,你了解多少?
  5. 自学系列 | 俺今天就谈兴趣!
  6. 自学第五十五天
  7. C++中 unordered_map 与 map 的区别
  8. 谁的青春不迷茫?
  9. kubernetes 命令随手记录
  10. modelsim经常破解失败