Csharp 简明教程
C
Encapsulation 定义为“将一个或多个项目包含在一个物理或逻辑包之中”。封装在面向对象编程方法中,阻止访问实现细节。
抽象和封装是面向对象编程中的相关特征。抽象使相关信息可见,而封装能够使程序员实现所需的抽象级别。
封装是通过使用 access specifiers 实现的。一个 access specifier 定义成员的范围和可视性。C# 支持以下访问说明符:
-
Public
-
Private
-
Protected
-
Internal
-
Protected internal
Public Access Specifier
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 的矩形类的实例从函数 Main() 中进行访问。
成员函数 Display() 和 GetArea() 也能直接访问这些变量,无需使用该类的任何实例。
成员函数 Display() 也声明为 public ,因此它也能使用名为 r 的矩形类的实例从 Main() 中进行访问。
Private Access Specifier
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 ,因此它们可以使用名为 r 的矩形类的实例从 Main() 中进行访问。
Internal Access Specifier
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() 没有用任何访问说明符进行声明。那么,如果我们未提及任何访问说明符,类的成员的默认访问说明符是什么?它是 private 。