C#早期綁定&後期綁定

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

相關文章
相關標籤/搜索