Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

С# — инкапсуляция

Инкапсуляция определяется как «процесс включения одного или нескольких элементов в физический или логический пакет». Инкапсуляция в методологии объектно-ориентированного программирования предотвращает доступ к деталям реализации.

Абстракция и инкапсуляция — связанные функции объектно-ориентированного программирования. Абстракция позволяет сделать релевантную информацию видимой, а инкапсуляция позволяет программисту реализовать желаемый уровень абстракции .

Инкапсуляция реализуется с помощью спецификаторов доступа. . Описатель доступа определяет область действия и видимость члена класса. C# поддерживает следующие спецификаторы доступа —

Спецификатор общего доступа

Спецификатор открытого доступа позволяет классу предоставлять свои переменные-члены и функции-члены другим функциям и объектам. К любому открытому члену можно получить доступ извне класса.

Следующий пример иллюстрирует это —

Живая демонстрация
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();
      }
   }
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

Length: 4.5
Width: 3.5
Area: 15.75

В предыдущем примере переменные-члены length и width объявлены public. , поэтому к ним можно получить доступ из функции Main() с помощью экземпляра класса Rectangle с именем r .

Функция-член Display() и ПолучитьОбласть() также может обращаться к этим переменным напрямую, без использования какого-либо экземпляра класса.

Функции-члены Display() также объявляется общедоступным , поэтому к нему также можно получить доступ из Main() используя экземпляр класса Rectangle с именем r .

Спецификатор частного доступа

Спецификатор доступа Private позволяет классу скрыть свои переменные-члены и функции-члены от других функций и объектов. Только функции одного класса могут получить доступ к его закрытым членам. Даже экземпляр класса не может получить доступ к своим закрытым членам.

Следующий пример иллюстрирует это —

Живая демонстрация
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();
      }
   }
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

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

В предыдущем примере переменные-члены length и width объявлены private. , поэтому к ним нельзя получить доступ из функции Main(). Функции-члены AcceptDetails() и Показать() может получить доступ к этим переменным. Поскольку функции-члены AcceptDetails() и Показать() объявляются общедоступными , к ним можно получить доступ из Main() используя экземпляр класса Rectangle с именем r .

Спецификатор защищенного доступа

Спецификатор защищенного доступа позволяет дочернему классу получать доступ к переменным-членам и функциям-членам своего базового класса. Таким образом, это помогает в реализации наследования. Мы обсудим это более подробно в главе о наследовании.

Внутренний спецификатор доступа

Внутренний спецификатор доступа позволяет классу предоставлять свои переменные-члены и функции-члены другим функциям и объектам в текущей сборке. Другими словами, к любому члену с внутренним спецификатором доступа можно получить доступ из любого класса или метода, определенного в приложении, в котором определен член.

Следующая программа иллюстрирует это —

Живая демонстрация
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();
      }
   }
}

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

Length: 4.5
Width: 3.5
Area: 15.75

Обратите внимание, что в предыдущем примере функция-член GetArea() не объявляется ни с каким спецификатором доступа. Тогда каким будет спецификатор доступа по умолчанию для члена класса, если мы его не упомянем? Это частное .

Защищенный внутренний спецификатор доступа

Защищенный внутренний спецификатор доступа позволяет классу скрывать свои переменные-члены и функции-члены от других объектов и функций класса, за исключением дочернего класса в том же приложении. Это также используется при реализации наследования.


Язык C

  1. Класс и объект С#
  2. Модификаторы доступа C#
  3. C# статическое ключевое слово
  4. Абстрактный класс и метод С#
  5. Вложенный класс С#
  6. Частичный класс C# и частичный метод
  7. Запечатанный класс и метод С#
  8. Java — инкапсуляция
  9. Полиморфизм в С++
  10. Абстракция данных в C++