Encapsulation – Tính bao đóng trong C#

0
1273

Encapsulation được định nghĩa là quá trình che giấu một hoặc nhiều mục tin trong một khối vật lý hoặc logic. Trong phương pháp lập trình hướng đối tượng, đóng gói giúp ngăn chặn truy cập đến các thực hiện chi tiết.

Abstraction(tính trừu tượng) và encapsulation  là hai đặc điểm có liên quan nhau trong lập trình hướng đối tượng. Trừu tượng cho phép tạo ra các thông tin không được hiển thị rõ ràng và đóng gói cho phép một người lập trình thể hiện tính trừu tượng ở mức độ mong muốn.

Đóng gói được thực hiện bằng cách sử dụng access specifiers(Phạm vi truy cập). Một access specifier xác định phạm vi và tầm nhìn của một lớp thành viên. C # hỗ trợ các access specifier sau đây:

  • Public
  • Private
  • protected
  • Internal
  • Protected internal
  1. Public

Cho phép một lớp để lộ các biến thành viên và các hàm thành viên cho các chức năng và các đối tượng khác. Bất kỳ thành viên nào có thể được truy cập từ bên ngoài lớp này.

Ví dụ:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      //Các biến thành viên
      public double length;
      public double width;
      //Hàm thành viên của lớp Rectangle
      public double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//kết thúc lớp Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Trong ví dụ trên, biến thành viên lengthwidth được khai báo phạm vi truy cập là public , vì vậy chúng có thể được dùng trong hàm Main với một thể hiện của lớp Rectangle tên là r .

Các hàm thành viên Display() và GetArea () cũng có thể truy cập trực tiếp các biến mà không cần sử dụng bất kỳ thể hiện của lớp.

Các hàm thành viên Display () cũng được khai báo public , vì vậy nó cũng có thể được truy cập từ Main () sử dụng một thể hiện của lớp Rectangle, tên là r.

  1. Private

Cho phép một lớp che dấu các biến và các hàm thành viên khỏi các hàm của các đối tượng khác. Chỉ có những hàm của cùng một lớp mới có thể truy cập đến các thành viên private của nó. Ngay cả một thể hiện của một lớp cũng không thể truy cập các thành viên private của nó.

Ví dụ:

using System;
namespace RectangleApplication 
{
   class Rectangle
   {
      //Biến thành viên
      private double length;
      private double width;
      //Hàm thành viên
      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);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//kết thúc lớp Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.Acceptdetails();
         r.Display();
         Console.ReadLine();
      }
   }
}

Trong ví dụ trên, biến thành viên lengthwidth được khai báo private , vì vậy chúng không thể được truy cập từ hàm Main (). Các hàm thành viên AcceptDetails () và Display() có thể truy cập các biến này. Khi các hàm thành viên AcceptDetails () và Display () được khai báo public, chúng có thể được truy cập từ Main () khi sử dụng một thể hiện của lớp Rectangle, tên là r.

  1. Protected

Cho phép một lớp con truy cập các biến thành viên và hàm thành viên của lớp cơ sở của nó. Bằng cách này, nó giúp ích trong việc thực hiện kế thừa. Phần này sẽ được thảo luận chi tiết hơn trong chương kế thừa.

  1. Internal

Cho phép một lớp để lộ các biến thành viên và các hàm thành viên cho các hàm và các đối tượng khác trong cùng một kết cấu. Nói cách khác, bất kỳ thành viên được khai báo internal đều có thể được truy cập từ bất kỳ lớp hay phương thức được định nghĩa trong các ứng dụng mà các thành viên được xác định.

Ví dụ:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      //biến thành viên
      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());
      }
   }//kết thúc 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();
      }
   }
}

Trong ví dụ trên, chú ý rằng hàm thành viên GetArea () không được khai báo với bất kỳ phạm vi truy cập nào. Khi đó quyền truy cập được chỉ định là private.

  1. Protected internal

Cho phép một lớp che giấu biến và hàm thành viên khỏi các đối tượng khác trong lớp và hàm, ngoại trừ một lớp con trong cùng một ứng dụng. Điều này cũng được sử dụng khi thực hiện các kế thừa.

Chúc các bạn thành công!

This site uses Akismet to reduce spam. Learn how your comment data is processed.