浅谈C#中的早期绑定和后期绑定


本文摘自PHP中文网,作者青灯夜游,侵删。

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

早期绑定

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

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

早期绑定的优点

1、性能很快

2、易于编码、开发

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

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

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()时,它会抛出一个错误,因为编译器不知道这个方法。

后期绑定

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

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

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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。这就是为什么运行时解析过程被称为后期绑定的原因。

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

以上就是浅谈C#中的早期绑定和后期绑定的详细内容!

相关阅读 >>

C#中guid生成格式的四种方法的示例代码分享

C#实现复制和深度复制的方法详解

C# 获取随机字符串实现方法

C#利用反射根据类名创建类的实例对象的详细介绍

C#用什么软件编程?

详细介绍winformC#获得mac地址,ip地址,子网掩码,默认网关的代码实例(图)

详解C#中array和arraylist的区别

C#实现windows剪贴板监视器的代码具体介绍

如何看待C#中的out和ref?探讨它们之间的区别

C#二进制字节数组操作函数 截取字节数组subbyte的示例代码

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...