C# 封装
-
封装
封装被定义为“将一个或多个项目封装在物理或逻辑包装中的过程”。面向对象编程方法中的封装可防止访问实现细节。抽象和封装是面向对象编程中的相关功能。抽象使相关信息可见,封装使程序员能够实现所需的抽象水平。封装是通过使用访问说明符实现的。一个访问指示符定义了一类成员的范围和可见性。C# 支持以下访问说明符-- Public
- Private
- Protected
- Internal
- Protected internal
-
Public 访问说明符
Public 访问说明符允许类将其成员变量和成员函数公开给其他函数和对象。可以从类外部访问任何公共成员。以下示例说明了这一点-
尝试一下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,因此也可以使用Rectangle类的实例r来从Main() 访问它。 -
Private 访问说明符
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() 和Display() 可以访问这些变量。由于成员函数AcceptDetails() 和Display() 声明为public,因此可以使用Rectangle类的实例r来从Main() 访问它们。 -
Protected 访问说明符
protected 访问说明符允许子类访问其基类的成员变量和成员函数。这样,它有助于实现继承。我们将在 继承 一章中对此进行更详细的讨论。 -
Internal 访问说明符
Internal 访问说明符允许类将其成员变量和成员函数公开给当前程序集中的其他函数和对象。换句话说,任何具有内部访问说明符的成员都可以从定义该成员的应用程序内定义的任何类或方法中进行访问。以下程序说明了这一点-
尝试一下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() 。那么,如果我们不提及任何内容,则该类成员的默认访问是 Provate 的。 -
Protected Internal 访问说明符
Protected Internal 访问说明符允许类在同一应用程序中的子类之外的其他类对象和函数中隐藏其成员变量和成员函数。在实现继承时也使用此方法。