C # - Enkapsulasi

Encapsulationdidefinisikan 'sebagai proses melampirkan satu atau lebih item dalam paket fisik atau logis'. Enkapsulasi, dalam metodologi pemrograman berorientasi objek, mencegah akses ke detail implementasi.

Abstraksi dan enkapsulasi adalah fitur terkait dalam pemrograman berorientasi objek. Abstraksi memungkinkan membuat informasi yang relevan terlihat dan enkapsulasi memungkinkan programmer untuk menerapkan tingkat abstraksi yang diinginkan .

Enkapsulasi diimplementasikan dengan menggunakan access specifiers. Sebuahaccess specifiermendefinisikan ruang lingkup dan visibilitas anggota kelas. C # mendukung penentu akses berikut -

  • Public
  • Private
  • Protected
  • Internal
  • Dilindungi internal

Penentu Akses Publik

Penentu akses publik memungkinkan kelas untuk mengekspos variabel anggota dan fungsi anggota ke fungsi dan objek lain. Setiap anggota publik dapat diakses dari luar kelas.

Contoh berikut menggambarkan hal ini -

using System;

namespace RectangleApplication {
   class Rectangle {
      //member variables
      public double length;
      public double width;
      
      public 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
   
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Length: 4.5
Width: 3.5
Area: 15.75

Dalam contoh sebelumnya, panjang dan lebar variabel anggota dideklarasikan public, sehingga mereka bisa diakses dari fungsi Main () menggunakan turunan dari kelas Rectangle, bernama r.

Fungsi anggota Display () dan GetArea () juga dapat mengakses variabel ini secara langsung tanpa menggunakan instance kelas apa pun.

Fungsi anggota Display () juga dideklarasikanpublic, sehingga bisa juga diakses dari Main () menggunakan instance kelas Rectangle, bernamar.

Penentu Akses Pribadi

Penentu akses pribadi memungkinkan kelas untuk menyembunyikan variabel anggota dan fungsi anggota dari fungsi dan objek lain. Hanya fungsi dari kelas yang sama yang dapat mengakses anggota pribadinya. Bahkan sebuah instance kelas tidak dapat mengakses anggota pribadinya.

Contoh berikut menggambarkan hal ini -

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);
         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();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52

Dalam contoh sebelumnya, panjang dan lebar variabel anggota dideklarasikan private, jadi mereka tidak bisa diakses dari fungsi Main (). Fungsi anggota AcceptDetails () dan Display () dapat mengakses variabel ini. Karena fungsi anggota AcceptDetails () dan Display () dideklarasikanpublic, mereka bisa diakses dari Main () menggunakan turunan dari kelas Rectangle, bernamar.

Penentu Akses Terproteksi

Penentu akses yang dilindungi memungkinkan kelas anak untuk mengakses variabel anggota dan fungsi anggota dari kelas dasarnya. Dengan cara ini membantu dalam mengimplementasikan warisan. Kami akan membahas ini lebih detail di bab warisan.

Penentu Akses Internal

Penentu akses internal memungkinkan kelas untuk mengekspos variabel anggota dan fungsi anggota ke fungsi dan objek lain dalam rakitan saat ini. Dengan kata lain, setiap anggota dengan penentu akses internal dapat diakses dari kelas atau metode apa pun yang ditentukan dalam aplikasi tempat anggota tersebut didefinisikan.

Program berikut menggambarkan hal ini -

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
   
   class ExecuteRectangle {
      static void Main(string[] args) {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -

Length: 4.5
Width: 3.5
Area: 15.75

Dalam contoh sebelumnya, perhatikan bahwa fungsi anggota GetArea () tidak dideklarasikan dengan penentu akses apa pun. Lalu apa yang akan menjadi penentu akses default dari anggota kelas jika kita tidak menyebutkannya? iniprivate.

Penentu Akses Internal yang Dilindungi

Penentu akses internal yang dilindungi memungkinkan kelas untuk menyembunyikan variabel anggota dan fungsi anggota dari objek dan fungsi kelas lain, kecuali kelas anak dalam aplikasi yang sama. Ini juga digunakan saat menerapkan pewarisan.