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;
人们会认识到它正在写入a
和b
指向的结构的字段X
在C#中,所讨论的代码的行为将取决于b
的类型是类还是结构。
但是,如果C#为类和结构类型使用了不同的解除引用运算符,那么向C#添加generics将是困难的,因为特定的代码段可能会取消引用接口约束类型的实例,而不知道类型是否问题是结构或类; 如果结构使用与类不同的运算符,则不清楚应该使用哪个运算符。
虽然C#在幕后有指针,但它们对用户完全隐藏。 你无法得到一个指向取消引用它的指针。 您只有点符号才能访问某些内容,无论原始是否是指针都是隐藏的。
你甚至意识到指针的唯一方法是通过引用而不是通过值传递的东西。