本文转载自微信公众号《后端Q》,作者柯南。转载请联系后台Q公众号。封装被定义为“将一个或多个项目封装在一个物理或逻辑包中”。在面向对象的编程方法中,封装是为了防止访问实现细节。抽象和封装是面向对象程序设计的相关特征。抽象让相关信息可视化,封装让开发者达到想要的抽象层次。C#封装根据具体需要设置用户的访问权限,通过访问修饰符实现。访问修饰符定义类成员的范围和可见性。C#支持的访问修饰符如下:public:所有对象都可以访问;private:对象本身可以在对象内部访问;protected:只有本类及其子类的对象可以访问internal:同一个程序集的对象可以访问;protectedinternal:访问仅限于当前程序集或从包含的类派生的类型。公共访问修饰符Public访问修饰符允许类将其成员变量和成员函数公开给其他函数和对象。外部类可以访问任何公共成员。下面的例子说明了这一点:ExampleusingSystem;namespaceRectangleApplication{classRectangle{//Membervariablepublicdoublelength;publicdoublewidth;publicdoubleGetArea(){returnlength*width;}publicvoidDisplay(){Console.WriteLine("Length:{0}",length);Console.WriteLine("Width:{0}",width);Console.WriteLine("Area:{0}",GetArea());}}//矩形结束classExecuteRectangle{staticvoidMain(string[]args){Rectangler=newRectangle();r.length=4.5;r.width=3.5;r.Display();Console.ReadLine();}}}当上面的代码被编译和执行时,会产生如下结果:Length:4.5Width:3.5Area:15.75在上面的例子中,成员变量length和width被声明为public,所以它们可以被函数Main()使用Rectangle类的实例r访问。成员函数Display()和GetArea()可以直接访问这些变量。成员函数Display()也被声明为public,所以它也可以被Main()使用Rectangle类的实例r访问。Private访问修饰符Private访问修饰符允许类对其他函数和对象隐藏其成员变量和成员函数。只有同一个类中的函数才能访问它的私有成员。即使是类的实例也不能访问其私有成员。下面的例子说明了这一点:ExampleusingSystem;namespaceRectangleApplication{classRectangle{//Membervariableprivatedoublelength;privatedoublewidth;publicvoidAcceptdetails(){Console.WriteLine("Pleaseenterthelength:");length=Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入宽度:");width=Convert.ToDouble(Console.ReadLine());}publicdoubleGetArea(){returnlength*width;}publicvoidDisplay(){Console.WriteLine("长度:{0}",length);Console.WriteLine("Width:{0}",width);Console.WriteLine("Area:{0}",GetArea());}}//endclassRectangleclassExecuteRectangle{staticvoidMain(string[]args){Rectangler=newRectangle();r.Acceptdetails();r.Display();Console.ReadLine();}}}当上面的代码被编译和执行时,产生如下结果:Pleaseenterlength:4.4Pleaseenterwidth:3.3Length:4.4Width:3.3Area:14.52在上面的例子中,成员变量length和width被声明为private,所以不能被函数Main()访问.成员函数AcceptDetails()和Display()可以访问这些变量。由于成员函数AcceptDetails()和Display()被声明为公共的,因此Main()可以使用Rectangle类的实例r访问它们。受保护的访问修饰符受保护的访问修饰符允许子类访问其基类的成员变量和成员函数。这有助于继承。我们将在有关继承的章节中详细讨论这一点。更详细地讨论这个问题。内部访问说明符内部访问说明符允许类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说,任何具有内部访问修饰符的成员都可以由定义该成员的应用程序中定义的任何类或方法访问。下面的例子说明了这一点:ExampleusingSystem;namespaceRectangleApplication{classRectangle{//Membervariableinternaldoublelength;internaldoublewidth;doubleGetArea(){returnlength*width;}publicvoidDisplay(){Console.WriteLine("Length:{0}",length);Console.WriteLine("宽度:{0}",width);Console.WriteLine("面积:{0}",GetArea());}}//endclassRectangleclassExecuteRectangle{staticvoidMain(string[]args){Rectangler=newRectangle();r.length=4.5;r.width=3.5;r.Display();Console.ReadLine();}}}当上面的代码被编译和执行时,它产生如下结果:length:4.5width:3.5Area:15.75在上面的例子中,请注意成员函数GetArea()的声明没有任何访问修饰符。如果未指定访问修饰符,则使用类成员的默认访问修饰符,即private。ProtectedInternal访问修饰符ProtectedInternal访问修饰符允许在此类、派生类或包含此类的程序集中进行访问。这也用于实现继承。
