2010-07-21 18 views
5

我的同事总是告诉我,如果我们将任何东西声明为“公共”,那么它是危险的,因为任何程序都可以访问该内存,并且解决方案是使用“私有”访问修饰符。在C#中声明一个变量为“private”是否可以保护窗口中的内存不被内存扫描器访问?

我想知道这是否是事实真实。

+2

看起来你的同事对面向对象编程的理解很差,你可能想要为他获得一些基本的阅读材料,以便他可以开始理解编程的本质。 – thaBadDawg 2010-07-21 19:30:51

回答

9

那就是不是,其实是真的。

访问修饰符仅用于帮助组织您的代码。它们只能保护它,因为通过将玻璃放在猫的伸手可及的位置,可以防止玻璃被撞倒。

+1

+1 Joviee - Public/Private是班级/成员访问权限指定者。然而,你的同事可能打算传达的是,如果你的班级/成员被宣布为公开的,那么他们实际上可以被任何其他班级直接访问,这可能是不希望的。 – InSane 2010-07-21 04:01:28

+3

+1,但为那些不理解“为什么”的人增加了一些实际的解释。 – 2010-07-21 04:10:20

+0

谢谢雷克斯M.太好了! – MatthewKing 2010-07-21 04:18:27

-1

C#修饰符对内存可寻址性没有影响 - 处理器和操作系统体系结构控制着它。

+1

如果是这样,这将是相当有趣的。如果情况并非如此,那是非常贬低和粗鲁的。 – 2010-07-21 04:08:10

+0

有趣的是,你的gravatar没有显示你的neckbeard的优越性。事实上,看起来你没有任何限制!让我怀疑你的braggadocio正在隐藏一些东西...... – Will 2010-07-21 12:59:36

+0

+1:我想知道同样的事情。 – 2010-07-21 15:25:18

2

public and private访问修饰符只与这些结构(类,方法或变量)对同一应用程序中其他类的可见性有关。进程和用户之间的内存保护由操作系统执行。在Windows的情况下,它确实确保非管理员级别(和系统环)进程/线程无法访问未通过开放权限明确共享的内存(如共享内存)。实际上,Windows允许进程授予特定内存区域的特定权限,但这在C#的语言定义中没有提供。您需要访问系统API以控制对特定内存块的访问权限;默认情况下,所有内存块都受OS的保护。

现在,如果内存扫描程序运行在ring-0或具有特定的提升权限,则在您的进程中没有任何操作可以阻止该访问。

+0

实际上,普通用户进程通常也可以访问具有相同用户/完整性级别的其他进程的内存。 – SamB 2011-10-07 05:40:06

相关问题