欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > C#:封装(encapsulated)

C#:封装(encapsulated)

2025/4/8 22:37:31 来源:https://blog.csdn.net/2402_88047672/article/details/146949527  浏览:    关键词:C#:封装(encapsulated)

目录

第一性原理:什么是封装?

C#中封装的具体实现

什么时候需要封装? 

为什么需要封装?

第一性原理:什么是封装?

从最基础的角度看,封装其实是人类生活中一种很常见的想法——把相关的东西放在一起,保护它们不受外界干扰,同时只暴露我们希望别人知道或使用的部分。想象你有一个抽屉,里面放着你的私人物品。你不会让每个人都能随便打开抽屉乱翻,而是只在需要的时候自己拿东西,或者告诉别人“这个抽屉里有什么,你可以问我,但我不会让你直接动它”。封装在编程里也是类似的道理。

在C#(或者其他面向对象编程语言)中,封装是一种设计思想和实践,它的核心目标是:

  1. 隐藏细节:把代码的内部实现细节隐藏起来,只对外暴露必要的接口或方法。

  2. 保护数据:防止外部随意修改或访问数据,确保数据安全和一致性。

  3. 提高代码的可维护性:让代码结构更清晰,修改内部逻辑时不会影响到外部的使用。

在C#中,封装就是把类的内部数据(比如变量)和行为(比如方法)包装成一个“黑盒子”。外部世界(其他代码或程序)只能通过你提供的“接口”来与之交互,而不能直接乱动里面的东西。 

C#中封装的具体实现

在C#里,封装主要通过以下几种方式实现:

1. 使用访问修饰符(Access Modifiers)

C#提供了几种访问修饰符来控制谁能访问类的成员(字段、方法、属性等)。最常用的有:

  • public:公开的,任何人都能访问。比如咖啡机的“按下按钮”功能是公开的,你可以直接用。

  • private:私有的,只有类内部能访问。比如咖啡机的内部电路设计是私密的,外人看不到也碰不到。

  • protected:保护的,只有类本身和它的子类能访问。

  • internal:仅限于同一个程序集(项目)内部能访问。

public class Person
{// 私有的字段(隐藏细节)private string _name; // 名字是私有的,外界不能直接修改// 公开的属性(提供接口)public string Name { get { return _name; } // 读取名字set { _name = value; } // 设置名字,但可以加限制}// 公开的方法(提供功能)public void SayHello(){Console.WriteLine($"Hello, my name is {_name}");}
}

_name 是私有的,外界不能直接访问或修改。 

Name 属性是公开的,但它控制了如何读取和设置 _name,比如你可以加一些校验(比如名字不能为空)。 

SayHello 是公开的方法,别人可以用它来让 Person 对象打招呼。 

注意: 

对私有和公共字段使用不同的大小写。 我们使用camelCase形式表示私有字段,而用PascalCase形式表示公共字段。PascalCase是指变量名中每个单词的变量名中每个单词的首字母大小。camelCase与PascalCase类似,只不过第一个首字母是小写。这称为camelCase是因为它让大写的字母看起来就像一个骆驼的“驼峰”。

为公共和私有字段使用不同的大小写是很多程序员遵循的一个约定。如果你为字段、属性、变量和方法选择名字时使用一致的大小写,你的代码会更易读。

2. 属性(Properties)

属性是C#中封装的重要工具。它就像是一个“门卫”,控制谁可以进出你的数据。你可以设置规则,比如:

  • 只读(只提供 get,不提供 set)。

  • 只写(只提供 set,不提供 get)。

  • 在设置数据时进行验证(比如确保年龄不能是负数)。

例子:

public class Student
{private int _age; // 私有的年龄字段public int Age{get { return _age; }set { if (value < 0){throw new Exception("年龄不能是负数!");}_age = value; }}
}

这里,Age 属性封装了 _age 字段。如果有人试图设置一个负数的年龄,程序会报错,这样就保护了数据的合理性。

什么时候需要封装? 

只在需要时才将字段和方法设置为公共。如果没有合理的原因将某个成员声明为公共的,就不要把它作为公共成员。如果让程序里的所有字段都是公共的,你会把事情搞的一团糟。不过,也不要简单的让所有成员都是私有的。提前花点时间好好考虑一下,哪些字段确实应该是公共的,而哪些是不需要的。 

为什么需要封装?

回到第一性原理,封装的本质是为了减少复杂性、提高安全性和灵活性。想象如果咖啡机的每个部件都暴露在外,任何人随便乱动,可能就会坏掉。同样,如果程序中的每个变量和方法都让外界随便访问,代码会变得混乱,容易出错。

封装的好处包括:

  • 安全:防止外界意外修改数据或调用不该调用的方法。

  • 灵活:你可以随时修改类的内部实现(比如换一种算法),只要对外的接口不变,其他代码不用改。

  • 清晰:让代码结构更干净,职责更明确——类负责自己的数据和行为,不被外界干扰。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词