【发布时间】:2016-12-09 04:17:51
【问题描述】:
为什么我可以这样做?是bug吗?
Debug.WriteLine (System.Boolean.FalseString); // output: "False"
fixed (char* xx = System.Boolean.FalseString) {
xx[1] = 'X';
}
Debug.WriteLine (System.Boolean.FalseString); // output: "FXlse"
然后,FalseString 具有新值。
我不知道是否是一个错误,因为FalseString 是一个只读字段。
是否存在安全问题?
托管模型真的不安全吗?
我可以从附属库中进行更改,这会导致主进程崩溃吗?
【问题讨论】:
-
关键字被称为“不安全”是有原因的
-
这有什么让你困惑的?您正在进入内存并以一种不关心只读性的方式对其进行修改。
-
我并不困惑。我知道我正在使用指针访问内存。在我看来,这似乎是一个设计错误和框架的概念。我只是认为 readonly 是在内存的受保护或只读(受控)部分中创建的。实际上,“不安全”这个词被放在了不安全的代码中,这是令人困惑的。 Readonly 应该是 readonly 并且 unsafe 应该释放我自己的数据并且不允许我修改未标记为“不安全”的代码数据
-
你认为记忆是如何工作的?你怎么会不能指向某些东西并改变它?你认为它是一个类似储物柜的系统,你可以在里面关闭它,只有你有钥匙才能打开它?
-
或多或少...有由处理器控制的只读内存页...
标签: c# string fixed readonly unsafe