C# 캡슐화
패키징은 "하나 이상의 항목을 물리적 또는 논리적 패키지에 담는 것"으로 정의됩니다. 객체 지향 프로그래밍 방법론에서는 구현 세부 사항에 대한 액세스를 방지하기 위해 캡슐화가 사용됩니다.
추상화와 캡슐화는 객체 지향 프로그래밍의 관련 기능입니다. 추상화를 통해 관련 정보를 시각화할 수 있으며, 캡슐화를 통해 프로그래머는 원하는 수준의 추상화를 달성할 수 있습니다.
캡슐화는 액세스 수정자를 사용하여 구현됩니다. 액세스 한정자는 클래스 멤버의 범위와 가시성을 정의합니다. C#에서 지원하는 액세스 한정자는 다음과 같습니다.
Public
Private
Protected
Internal
Protected Internal
공개 액세스 수정자
공개 액세스 수정자를 사용하면 클래스가 해당 멤버 변수와 멤버 함수를 다른 함수 및 개체에 노출할 수 있습니다. 모든 공개 멤버는 외부 클래스에서 액세스할 수 있습니다.
다음 예는 이를 보여줍니다.
using System; namespace RectangleApplication { class Rectangle { //成员变量 public double length; public double width; public double GetArea() { return length * width; } public void Display() { Console.WriteLine("长度: {0}", length); Console.WriteLine("宽度: {0}", width); Console.WriteLine("面积: {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(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
长度: 4.5 宽度: 3.5 面积: 15.75
위의 경우 에서 멤버 변수 length 및 width는 public으로 선언되므로 Rectangle 클래스의 인스턴스 r을 사용하여 Main() 함수에서 액세스할 수 있습니다.
멤버 함수 Display() 및 GetArea()도 클래스 인스턴스를 사용하지 않고 이러한 변수에 직접 액세스할 수 있습니다.
멤버 함수 Display()도 공개로 선언되어 있으므로 Rectangle 클래스의 인스턴스 r을 사용하여 Main()에서 액세스할 수도 있습니다.
개인 액세스 수정자
개인 액세스 수정자를 사용하면 클래스가 멤버 변수와 멤버 함수를 다른 함수 및 객체로부터 숨길 수 있습니다. 동일한 클래스 내의 함수만 전용 멤버에 액세스할 수 있습니다. 클래스의 인스턴스라도 해당 비공개 멤버에 액세스할 수 없습니다.
다음 예는 이를 보여줍니다.
using System; namespace RectangleApplication { class Rectangle { //成员变量 private double length; private double width; public void Acceptdetails() { Console.WriteLine("请输入长度:"); length = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("请输入宽度:"); width = Convert.ToDouble(Console.ReadLine()); } public double GetArea() { return length * width; } public void Display() { Console.WriteLine("长度: {0}", length); Console.WriteLine("宽度: {0}", width); Console.WriteLine("面积: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(); r.Acceptdetails(); r.Display(); Console.ReadLine(); } } }
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
请输入长度: 4.4 请输入宽度: 3.3 长度: 4.4 宽度: 3.3 面积: 14.52
위의 경우 , 멤버 변수 length 및 width는 비공개로 선언되므로 Main() 함수에서 액세스할 수 없습니다.
멤버 함수 AcceptDetails() 및 Display()는 이러한 변수에 액세스할 수 있습니다.
멤버 함수 AcceptDetails() 및 Display()가 공개로 선언되었으므로 Main()에서 Rectangle 클래스의 인스턴스 r을 사용하여 액세스할 수 있습니다.
보호 액세스 수정자
보호 액세스 수정자를 사용하면 하위 클래스가 기본 클래스의 멤버 변수 및 멤버 함수에 액세스할 수 있습니다. 이는 상속에 도움이 됩니다. 이에 대해서는 상속 장에서 자세히 논의하겠습니다. 이에 대해 더 자세히 논의하십시오.
내부 액세스 수정자
내부 액세스 지정자를 사용하면 클래스가 해당 멤버 변수와 멤버 함수를 현재 프로그램의 다른 함수 및 개체에 노출할 수 있습니다. 즉, 내부 액세스 한정자가 있는 모든 멤버는 해당 멤버가 정의된 애플리케이션 내에 정의된 모든 클래스 또는 메서드에서 액세스할 수 있습니다.
다음 예에서는 이를 보여줍니다.
using System; namespace RectangleApplication { class Rectangle { //成员变量 internal double length; internal double width; double GetArea() { return length * width; } public void Display() { Console.WriteLine("长度: {0}", length); Console.WriteLine("宽度: {0}", width); Console.WriteLine("面积: {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(); } } }
长度: 4.5 宽度: 3.5 面积: 15.75
위 예에서 멤버 함수 GetArea에 유의하세요. ()는 액세스 수정자 없이 선언되었습니다. 액세스 한정자를 지정하지 않으면 클래스 멤버의 기본 액세스 한정자(private)가 사용됩니다.
Protected 내부 액세스 수정자
Protected 내부 액세스 수정자를 사용하면 클래스가 동일한 애플리케이션 내의 하위 클래스 외부에 있는 함수 및 다른 클래스 객체로부터 멤버 변수와 멤버 함수를 숨길 수 있습니다. 이는 상속을 구현하는 데에도 사용됩니다.
위 내용은 [c# 튜토리얼] C# encapsulation 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!