早期绑定(early binding),又可以称为静态绑定(static binding)。在使用某个程序集前,已知该程序集里封装的方法、属性等。则创建该类的实例后可以直接调用类中封装的方法。

后期绑定(late binding),又可以称为动态绑定(dynamic binding),需要使用System.Reflection,动态地获取程序集里封装的方法、属性等。

Example: 在命名空间Binding中有一个Employee类,代码如下:

public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public float Salary { get; set; } public Employee()
{
ID = -1;
Name = string.Empty;
Salary = 0;
}
public Employee(int id, string name, float salary)
{
ID = id;
Name = name;
Salary = salary;
}
public void DisplayName()
{
Console.WriteLine("Name : " + Name);
}
public void PrintSalary()
{
Console.WriteLine("Salary : " + Salary);
}
public void displayemp(string name)
{
Console.WriteLine("Name : " + name);
} }

早期绑定是已知该类中的属性和方法,只要实例化类后,可以直接调用类中的方法,如下所示:

class Program
{
static void Main(string[] args)
{
// Early Binding
Employee employee = new Employee();
employee.Name = "Larissa";
employee.ID = 64;
employee.Salary = 3000; employee.DisplayName();
employee.PrintSalary(); Console.Read();
}
}

后期绑定需要使用System.Reflection获取类中的方法和属性。这种后期绑定的方法大量的被使用在IDE和UI设计中,如下所示:

class Program
{
static void Main(string[] args)
{
Type _type = Type.GetType("Binding.Employee");
Console.WriteLine(_type.FullName);
Console.WriteLine(_type.Namespace);
Console.WriteLine(_type.Name); PropertyInfo[] info = _type.GetProperties();
foreach(PropertyInfo propinfo in info)
{
Console.WriteLine(propinfo.Name);
} MethodInfo[] methods = _type.GetMethods();
foreach(MethodInfo methodinfo in methods)
{
Console.WriteLine(methodinfo.ReturnType.Name);
Console.WriteLine(methodinfo.Name);
} Console.Read();
}
}

运行结果如图所示:

早期绑定易于开发且会比后期绑定运行的更快,因为不需要类型转换。此外早期绑定中出错的可能性较小。后期绑定的优点是可以保存对任何对象的引用。

参考文献:https://www.codeproject.com/Tips/791017/Reflection-Concept-and-Late-Binding-in-Csharp

C#早期绑定&后期绑定的更多相关文章

  1. java的多态以及重载,重写,前期绑定,后期绑定

    多态的定义: 一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同内部结构的对象可以共享相同的外部接口.这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通 ...

  2. 关于JAVA中的前期绑定 后期绑定(动态绑定)

    前期绑定,在程序执行前根据编译时类型绑定,调用开销较小,如C语言只有前期绑定这种方法调用. 后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定.实现后期绑定,需要某种机制支持,以便 ...

  3. vb小菜一枚--------早期绑定和后期绑定

    早期绑定和后期绑定 Visual Studio 2005   其他版本   将对象分配给对象变量时,Visual Basic 编译器会执行一个名为 binding 的进程.如果将对象分配给声明为特定对 ...

  4. 理解Java中的前期绑定和后期绑定

    前期绑定,在程序执行前根据编译时类型绑定,调用开销较小,如C语言只有前期绑定这种方法调用. 后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定.实现后期绑定,需要某种机制支持,以便 ...

  5. 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定

    [源码下载] 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定 作者:we ...

  6. WINDOWS下绑定ARP绑定网关

    一.WINDOWS下绑定ARP绑定网关步骤一:在能正常上网时,进入MS-DOS窗口,输入命令:arp -a,查看网关的IP对应的正确MAC地址, 并将其记录下来.注意:如果已经不能上网,则先运行一次命 ...

  7. 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定

    介绍背水一战 Windows 10 之 绑定 TemplateBinding 绑定 与 RelativeSource 绑定 与 StaticResource 绑定 示例1.演示 TemplateBin ...

  8. 重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换

    [源码下载] 重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数 ...

  9. Linux驱动手动绑定和解绑定

    Linux内核从2.6.13-rc3开始,提供了在用户空间,可动态的绑定和解绑定设备和设备驱动之间关系的功能.在这之前,只能通过insmod(modprobe)和rmmod来绑定和解绑,而且这种绑定和 ...

随机推荐

  1. 使用VS Code的MySQL扩展管理数据库

    我将在本文告诉你如何用VS Code的扩展程序管理MySQL数据库,包括连接到MySQL.新建数据库和表.修改字段定义.简单的查询方法以及导入导出. 在许多情况下,我们需要随时查看数据库的记录来确保程 ...

  2. DispatcherServlet的init源代码

    springmvc执行过程源代码分析 1,tomcat启动,创建容器的过程 通过load-on-start标签指定的1,创建DispatcherServlet对象, DispatcherServlet ...

  3. Matplotlib 3.0 秘籍·翻译完成

    原文:Matplotlib 3.0 Cookbook 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交 ...

  4. AT2395 [ARC071C] TrBBnsformBBtion

    基于观察,可以发现以下两条性质: A 可以到 BB,BB 也可以到 A,对 B <-> AA 也是同理的. 可以通过这两个操作交换相邻元素. 对于前者,只需证明 BB 可以到 A 即可,不 ...

  5. 16进制字符串和byte数组进行相互转换\将10进制转换为任意进制

    16进制字符串和byte数组进行相互转换 简介 1个byte对应8个bit,16进制使用4个bit,所以一个byte转成16进制,占用两位. JAVA代码 private static final c ...

  6. winSCP上传文件到服务器失败,提示permission denied,返回码3

    1.查看sftp服务在你服务器的路径 cat /etc/ssh/sshd_config | grep sftp 2.在winSCP进行连接设置 设置好你的主机名.端口.用户名和密码,然后点击高级,点击 ...

  7. Sublime Text 官方网站 http://www.sublimetext.com

    Sublime Text 官方网站 http://www.sublimetext.com

  8. 超详细的node/v8/js垃圾回收机制

    前言 垃圾回收器是一把十足的双刃剑.其好处是可以大幅简化程序的内存管理代码,因为内存管理无需程序员来操作,由此也减少了(但没有根除)长时间运转的程序的内存泄漏.对于某些程序员来说,它甚至能够提升代码的 ...

  9. Android图表库hellocharts详解

    感谢大佬:https://www.cnblogs.com/huolongluo/p/5988644.html 因为项目需要搞一个折线图,按照日期显示相应的成绩,所以有了本文. 以前用过一次XCL-ch ...

  10. 通过bindservice方式调用服务方法里面的过程

    为什么要引入bindService:目的为了调用服务里面的方法 (1)定义一个服务 服务里面有一个方法需要Activity调用 (2)定义一个中间人对象(IBinder) 继承Binder (3)在o ...