我们保护我们的班级免受谁的侵害?

Posted

技术标签:

【中文标题】我们保护我们的班级免受谁的侵害?【英文标题】:Who do we protect our classes from? 【发布时间】:2012-03-03 22:54:35 【问题描述】:

我目前正在学习 C#,我想知道,将类/方法声明为私有有什么意义?我们在隐藏/限制对这些类的访问。

因为如果有人正在编辑源代码,他们只需将标签从私有更改为公开即可。我不确定用户将如何访问这些方法以及它会导致什么问题。

tldr;访问修饰符有什么意义。

【问题讨论】:

你并没有真正“保护”他们免受任何人的伤害。没有人使用访问修饰符来保证安全。好吧,也许除了一些完全错误的想法的可怜的傻瓜。它没有什么安全的-可以按照您所说的修改源代码;缺少源代码可以篡改编译器输出;缺少这一点,人们可以在包括 C# 在内的许多语言中通过反射来做最狡猾的事情。 merithub.com/q/99-encapsulation-oops.aspx 相信我:你自己! 【参考方案1】:

这是一个基本的 OO 概念 - encapsulation,与安全性本身几乎没有任何关系。引用***(强调我的):

隐藏对象的内部可以通过以下方式保护其完整性 防止用户将组件的内部数据设置成 无效或不一致的状态。封装的一个好处是 它可以降低系统复杂性,从而提高鲁棒性,通过 允许开发人员限制软件之间的相互依赖关系 组件。

【讨论】:

【参考方案2】:

会员可见性(通常称为此功能)不是安全功能。它为程序员提供了便利,旨在帮助限制跨类依赖。通过将成员声明为私有,您可以防止其他代码直接访问它。这有两个好处:

如果您发现成员变量以您不希望的方式被操纵,那么当变量是私有变量时,您必须检查的代码量会大大减少 您可以更改类的内部工作方式(所有声明为私有的)而不破坏接口(所有声明为公共的)

成员可见性可能是实现封装最重要的语言特性,它是面向对象编程的核心原则之一。

【讨论】:

【参考方案3】:

访问修饰符用于封装:它们允许您安排 您在包和类中的代码,并且只有“官方”公开 接口对外可见,同时隐藏实现 详细信息(您想要这样做,以便您以后可以更改它而无需 告诉任何人)。

当您将代码发布为 供其他程序员使用的库。即使代码仅用于 您自己的程序,它有助于将较大的程序构造成几个 包。 - Thilo

【讨论】:

【参考方案4】:

它使您的代码保持整洁。您将代码分成公共接口和私有内部。

这样,您可以更改内部结构,而不必担心破坏取决于您的类的代码。您还可以放心地假设在您不查看时没有其他代码修改了您的内部状态。

【讨论】:

【参考方案5】:

您可以通过 2 种方式编写代码:为扩展而设计和按原样使用而设计。

您可能有权访问源代码,也可能无法访问。

访问修饰符在为扩展而设计的代码中最为重要,其中客户端程序员(扩展和使用您的代码的程序员)只需要访问您公开的 API - 基本上,访问您通过使用这些访问修饰符提供的接口.

【讨论】:

【参考方案6】:

访问修饰符用于encapsulation,以便对外部用户或类隐藏对象/类的内部。这可以防止用户通过修改其实例变量和/或函数来意外或故意破坏对象/类。

封装是Open/closed principle 的重要组成部分,它指的是一个类“对扩展开放”但“对修改关闭”。这个原则允许类的扩展,而不必担心类的 API 将来可能会发生变化。

【讨论】:

以上是关于我们保护我们的班级免受谁的侵害?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护mysql数据库免受任何人的侵害

什么可以保护无线网络免受同名假冒网络的侵害? [关闭]

保护 iframe 免受其他人的侵害并为 iframe 使用一个域?

如何保护我的论坛免受垃圾邮件的侵害?

如何保护我的网络游戏免受作弊者的侵害?

保护电子邮件地址免受垃圾邮件机器人/网络爬虫的侵害