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 ,因此可以使用名为 r 的 Rectangle 类的实例从函数 Main() 访问它们 .
成员函数Display() 和 GetArea() 也可以不使用类的任何实例直接访问这些变量。
成员函数 Display() 也被声明为 public , 所以也可以从 Main() 访问 使用名为 r 的 Rectangle 类的实例 .
私人访问说明符
私有访问说明符允许类对其他函数和对象隐藏其成员变量和成员函数。只有同一个类的函数才能访问它的私有成员。即使是一个类的实例也不能访问它的私有成员。
下面的例子说明了这一点 -
现场演示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() 和 Display() 可以访问这些变量。由于成员函数 AcceptDetails() 和 Display() 被声明为public ,它们可以从 Main() 访问 使用名为 r 的 Rectangle 类的实例 .
受保护的访问说明符
受保护的访问说明符允许子类访问其基类的成员变量和成员函数。这种方式有助于实现继承。我们将在继承章节中更详细地讨论这一点。
内部访问说明符
内部访问说明符允许类将其成员变量和成员函数公开给当前程序集中的其他函数和对象。换句话说,任何具有内部访问说明符的成员都可以从定义该成员的应用程序中定义的任何类或方法访问。
以下程序说明了这一点 -
现场演示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() 未使用任何访问说明符声明。那么如果我们不提及任何类成员的默认访问说明符,那将是什么?它是私人的 .
受保护的内部访问说明符
protected 内部访问说明符允许类对其他类对象和函数隐藏其成员变量和成员函数,同一应用程序中的子类除外。这也用于实现继承。
C语言