我的同事总是告诉我,如果我们将任何内容声明为“公共”,那么这很危险,因为任何程序都可以访问该内存,并且解决方案是使用“私有”访问修饰符。
我想知道这是否是真的。
我的同事总是告诉我,如果我们将任何内容声明为“公共”,那么这很危险,因为任何程序都可以访问该内存,并且解决方案是使用“私有”访问修饰符。
我想知道这是否是真的。
事实上,这不是真的。
访问修饰符仅用于帮助组织您的代码。它们只是在您将玻璃放在猫够不到的地方来保护玻璃不被撞翻的意义上保护它。
public
private
访问修饰符只与这些结构(类、方法或变量)对同一应用程序中的其他类的可见性有关。进程和用户之间的内存保护由操作系统强制执行。在 Windows 的情况下,它确实确保非管理员级别(和系统环)进程/线程无法访问具有开放权限的未明确共享的内存(例如共享内存)。实际上,Windows 允许进程对特定内存区域授予非常特定的权限,但这在 C# 的语言定义中没有提供。您需要访问系统 API 来控制授予对特定内存块的访问权限;默认情况下,所有内存块都受操作系统保护。
现在,如果内存扫描程序在 ring-0 中运行或具有特定提升的权限,则您无法在进程中执行任何操作来阻止该访问。
C# 修饰符对内存寻址能力没有影响——处理器和操作系统架构控制着它。