.NET中public类型为何不能像fixed那样限制访问?

2026-05-27 08:120阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1290个文字,预计阅读时间需要6分钟。

.NET中public类型为何不能像fixed那样限制访问?

之前写过《值类型不是值类型》一文。今天,再来个语言游戏: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 的另一种用法。

阅读全文
标签:fixed

本文共计1290个文字,预计阅读时间需要6分钟。

.NET中public类型为何不能像fixed那样限制访问?

之前写过《值类型不是值类型》一文。今天,再来个语言游戏: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 的另一种用法。

阅读全文
标签:fixed