早期綁定(early binding),又能夠稱爲靜態綁定(static binding)。在使用某個程序集前,已知該程序集裏封裝的方法、屬性等。則建立該類的實例後能夠直接調用類中封裝的方法。spa
後期綁定(late binding),又能夠稱爲動態綁定(dynamic binding),須要使用System.Reflection,動態地獲取程序集裏封裝的方法、屬性等。設計
Example: 在命名空間Binding中有一個Employee類,代碼以下:code
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設計中,以下所示:blog
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(); } }
運行結果如圖所示:ip
早期綁定易於開發且會比後期綁定運行的更快,由於不須要類型轉換。此外早期綁定中出錯的可能性較小。後期綁定的優勢是能夠保存對任何對象的引用。開發
參考文獻:https://www.codeproject.com/Tips/791017/Reflection-Concept-and-Late-Binding-in-Csharpget