C#指针到成员运算符是C#中的一种特殊运算符,它可以用来访问指针所指向的对象的成员。它是一个右结合运算符,其语法如下:
pointer->member
其中,pointer 是一个指向对象的指针,而 member 是该对象的成员。当使用这个运算符时,它会将 pointer 所指向的对象作为上下文,然后在该上下文中解析 member 。
C# 提供了一些特性来帮助开发者使用这个运算符。例如:如果 pointer 所指向的对象是一个数组,则可以使用 [] 运算符来获取数组中的元素。此外,也可以使用 . 运算来引用 pointer 所指向对象的嵌套成员。
C# 也允许开发者在不使用 C# 核心语法的情况下使用 -> 运行来引用 pointer 所指向对象的成员。例如:在 C++ 中有一些特性是 C# 不具备的(例如多重重写、重新定义和重新声明方法、属性和字段)。因此,在 C++ 代码中使用 -> 运行来引用 pointer 所指向对象的成员时会很有帮助。
总之,C# 的 -> 运行是一个很有用的工具,它能够帮助开发者快速方便地获取 pointer 所描述对象中所有成员信息,并能够应付 C++ 等语法不具备特性时,快速方便地引用相应成员信息.
C#可以通过标记为不安全的代码块中的指针进行直接内存操作。
不安全代码应使用 /unsafe
编译器选项进行编译。
指针实例保存变量的地址。
指针类型可以转换为任何其他指针类型。
主要的指针运算符是:
运算符 | 含义 |
---|---|
& | 返回一个指向变量地址的指针 |
* | 返回指针地址处的变量 |
-> | 一个语法快捷方式,其中x-> y等价于(* x).y |
通过用unsafe关键字标记类型,类型成员或语句块,我们可以使用指针类型并对内存执行C ++风格指针操作。
下面是使用指针快速处理数组的示例:
unsafe void Process (int[,] data){ int length = data.Length; fixed (int* b = data){ int* p = b; for (int i = 0; i < length; i++) *p++ &= 0xFF; } }
在一个固定语句中,我们可以获得任何值类型的指针,值类型的数组或字符串。
在数组和字符串的情况下,指针将实际指向第一个元素,它是一个值类型。
在引用类型中声明为内联的值类型需要将引用类型固定,如下所示:
class Main { int x; static void Main(){ Test test = new Test(); unsafe{ fixed (int* p = &test.x) // Pins test { *p = 0; } System.Console.WriteLine (test.x); } } }
除了&
和 *
运算符之外,C#还提供了C ++风格的 ->
运算符,它可以在结构上使用:
struct Test{ int x; unsafe static void Main(){ Test test = new Test(); Test* p = &test; p->x = 1; System.Console.WriteLine (test.x); } }
C# 扩展方法扩展方法可以用新方法扩展现有类型改变原始类型的定义。扩展方法是静态类的静态方法,其中this修饰符应用于第一个参...
C# 运算符重载运算符可以为自定义类型重载。以下符号运算符可以重载:+(unary) -(unary) ! ~++--+ -*/%|^ == !== =以下运算符也...
C# 可空类型引用类型可以使用空引用表示不存在的值。值类型通常不能表示空值。例如:string s = null; // OK, Reference Typeint ...
C# 枚举枚举器是值的列表上的只读,只向前的光标。枚举器是实现以下任一接口的对象:System.Collections.IEnumeratorSystem.Colle...
C# for/foreach 循环C# 循环一个 for 循环是一个允许您编写一个执行特定次数的循环的重复控制结构。语法C# 中 for 循环的语法:f...