C#是否使用 – >指针表示法?

我正在尝试学习C#,我熟悉C ++ struct指向符号 – >我很好奇是否可以转换到C#。

例:

someStruct->someAttribute += 1; 

在C#中有指针表示法,但仅在特殊情况下使用unsafe关键字。

使用常规对象取消引用. ,但如果你想编写快速代码,你可以固定数据(以避免垃圾收集器移动的东西),从而“安全”使用指针算法,然后你可能需要->

有关在C#中使用-> ,请参阅指针类型(C#编程指南)和本例中的一点点。

它看起来像这样(从最后一个链接):

 struct MyStruct { public long X; public double D; } unsafe static void foo() { var myStruct = new MyStruct(); var pMyStruct = & myStruct; // access: (*pMyStruct).X = 18; (*pMyStruct).D = 163.26; // or pMyStruct->X = 18; pMyStruct->D = 163.26; } 

C#不区分指针和引用。 实际上一切都是参考,所以使用。 符号。

编辑:正如下面的评论所指出的那样,它并不那么简单。 有引用类型和值类型。 我上面的意思是引用类型和指针类型之间没有区别。

编辑2:虽然显然你有使用c#的不安全部分! 我今天学到了一些东西!

C#决定使用它很有意思. 而不是->引用类引用引用的对象的成员,因为语义更接近于C的->运算符而不是它的语义. 运营商。 例如,在C中,如果看到代码a=b; aX=5; a=b; aX=5; 人们会认识到它正在写一些结构a字段X ,这是与b不同的结构。 相反,如果看到代码a=b; a->X=5; a=b; a->X=5; 人们会认识到它正在写入ab指向的结构的字段X 在C#中,所讨论的代码的行为将取决于b的类型是类还是结构。

但是,如果C#为类和结构类型使用了不同的解除引用运算符,那么向C#添加generics将是困难的,因为特定的代码段可能会取消引用接口约束类型的实例,而不知道类型是否问题是结构或类; 如果结构使用与类不同的运算符,则不清楚应该使用哪个运算符。

虽然C#在幕后有指针,但它们对用户完全隐藏。 你无法得到一个指向取消引用它的指针。 您只有点符号才能访问某些内容,无论原始是否是指针都是隐藏的。

你甚至意识到指针的唯一方法是通过引用而不是通过值传递的东西。