早期綁定(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