.NET中public类型为何不能像fixed那样限制访问?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1290个文字,预计阅读时间需要6分钟。
之前写过《值类型不是值类型》一文。今天,再来个语言游戏:public的不能public,fixed的不能fixed。本文将构造一个古怪的类型:public字段无法访问,标了fixed关键字却无法fixed。
以前写过《值类型不是值类型》一文。今天,就再来个语言游戏:public 的不public,fixed 的不能 fixed。本文将构造一个古怪类型:public字段无法访问,标了fixed关键字却无法fixed。
(1)从 fixed 说起
fixed 的经典用法是取分配到托管堆上的值类型或值类型数组的地址,如:
public class Test { private int Value; private Int32[] Array = new Int32[3]; public unsafe void Foo() { fixed (int* p = &Value) { *p = 30; } fixed (Int32* pArray = Array) { pArray[0] = 30; } } }
为什么要fixed呢?山不转水转,有GC存在,随时可能把它所占的内存搬位置。fixed 就是告诉GC,这一块内存正被指针操作,别动。
下面是 fixed 的另一种用法。
本文共计1290个文字,预计阅读时间需要6分钟。
之前写过《值类型不是值类型》一文。今天,再来个语言游戏:public的不能public,fixed的不能fixed。本文将构造一个古怪的类型:public字段无法访问,标了fixed关键字却无法fixed。
以前写过《值类型不是值类型》一文。今天,就再来个语言游戏:public 的不public,fixed 的不能 fixed。本文将构造一个古怪类型:public字段无法访问,标了fixed关键字却无法fixed。
(1)从 fixed 说起
fixed 的经典用法是取分配到托管堆上的值类型或值类型数组的地址,如:
public class Test { private int Value; private Int32[] Array = new Int32[3]; public unsafe void Foo() { fixed (int* p = &Value) { *p = 30; } fixed (Int32* pArray = Array) { pArray[0] = 30; } } }
为什么要fixed呢?山不转水转,有GC存在,随时可能把它所占的内存搬位置。fixed 就是告诉GC,这一块内存正被指针操作,别动。
下面是 fixed 的另一种用法。

