http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Tính đóng gói C# Encapsulation (Tính đóng gói) định nghĩa “tiến trình đóng gói nhiều mục bên gói logic vật lý” Tính đóng gói, phương pháp lập trình hướng đối tượng, ngăn cản việc truy cập tới chi tiết trình trình triển khai (Implementation Detail) Tính trừu tượng tính đóng gói hai đặc điểm có liên quan với lập trình hướng đối tượng Tính trừu tượng cho phép tạo thơng tin liên quan nhìn thấy tính đóng gói cho lập trình viên khả triển khai độ trừu tượng kế thừa Tính đóng gói triển khai sử dụng Access Specifier Một Access Specifier định nghĩa phạm vi tính nhìn thấy thành viên lớp C# hỗ trợ Access Specifier sau: Public Private Protected Internal Protected internal Public Access Specifier C# Public Access Specifier C# cho phép lớp trưng bày biến thành viên hàm thành viên tới hàm đối tượng khác Bất kỳ thành viên public C# truy cập từ bên ngồi lớp Ví dụ sau minh họa Public Access Specifier C#: using System; namespace RectangleApplication { class Rectangle { //member variables public double length; public double width; public double GetArea() http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.length = 4.5; r.width = 3.5; r.Display(); Console.ReadLine(); } } } Khi code biên dịch thực thi, cho kết quả: Length: 4.5 Width: 3.5 Area: 15.75 Trong ví dụ, biến thành viên length width khai báo public, chúng truy cập từ hàm Main() sử dụng Instance (một thể hiện) lớp Rectangle, tên r Hàm thành viên Display() GetArea() truy cập biến cách trực tiếp mà không cần sử dụng instance lớp http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Hàm thành viên Display() khai báo public, truy cập từ hàm Main() sử dụng Instance (một thể hiện) lớp Rectangle, tên r Private Access Specifier C# Private Access Specifier C# cho phép lớp ẩn biến thành viên hàm thành viên với hàm đối tượng khác Chỉ có hàm lớp truy cập tới thành viên private Ngay Instance lớp truy cập thành viên private Ví dụ sau minh họa Private Access Specifier C#: using System; namespace RectangleApplication { class Rectangle { //member variables private double length; private double width; public void Acceptdetails() { Console.WriteLine("Enter Length: "); length = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Enter Width: "); width = Convert.ToDouble(Console.ReadLine()); } public double GetArea() { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.Acceptdetails(); r.Display(); Console.ReadLine(); } } } Khi code biên dịch thực thi, cho kết quả: Enter Length: 4.4 Enter Width: 3.3 Length: 4.4 Width: 3.3 Area: 14.52 Trong ví dụ, biến thành viên length width khai báo private, chúng khơng thể truy cập từ hàm Main() Các hàm thành viên AcceptDetails() Display() truy cập biến Khi hàm thành viên AcceptDetails() Display() khai báopublic, chúng truy cập từ hàm Main() sử dụng Instance (một thể hiện) lớp Rectangle, tên r http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Protected Access Specifier C# Protected Access Specifier C# cho phép lớp truy cập biến thành viên hàm thành viên lớp sở Cách giúp triển khai tính kế thừa Chúng ta thảo luận chi tiết tính kế thừa chương sau Internal Access Specifier C# Internal Access Specifier C# cho phép lớp trưng bày biến thành viên hàm thành viên tới hàm đối tượng khác Assembly Nói cách khác, thành viên với Internal Access Specifier C# truy cập từ lớp phương thức định nghĩa bên ứng dụng mà thành viên định nghĩa Ví dụ sau minh họa Internal Access Specifier C#: using System; namespace RectangleApplication { class Rectangle { //member variables internal double length; internal double width; double GetArea() { return length * width; } public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle http://vietjack.com/ Trang chia sẻ học online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.length = 4.5; r.width = 3.5; r.Display(); Console.ReadLine(); } } } Khi code biên dịch thực thi, cho kết quả: Length: 4.5 Width: 3.5 Area: 15.75 Trong ví dụ, bạn ý hàm thành viên GetArea() không khai báo với Access Specifier Thì theo mặc định, Access Specifier thành viên lớp không khai báo private Protected Internal Access Specifier C# Protected Internal Access Specifier C# cho phép lớp ẩn biến thành viên hàm thành viên với hàm đối tượng khác, ngoại trừ lớp bên ứng dụng Điều sử dụng triển khai tính kế thừa C# http://vietjack.com/ Trang chia sẻ học online miễn phí Page ... vietjack.com Protected Access Specifier C# Protected Access Specifier C# cho phép lớp truy c p biến thành viên hàm thành viên lớp sở C ch giúp triển khai tính kế thừa Chúng ta thảo luận chi tiết tính. .. GetArea() truy c p biến c ch tr c tiếp mà không c n sử dụng instance lớp http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Hàm... báopublic, chúng truy c p từ hàm Main() sử dụng Instance (một thể hiện) lớp Rectangle, tên r http://vietjack.com/ Trang chia sẻ h c online miễn phí Page http://vietjack.com/csharp/index.jsp Copyright