我正在尝试学习C#,并且我熟悉C++结构体指向符号->。我很好奇这会不会影响到C#。
示例:
someStruct->someAttribute += 1;发布于 2011-06-20 03:46:29
C#中有指针表示法,但只有在特殊情况下才使用unsafe关键字。
常规对象使用.解除引用,但如果您想编写快速代码,您可以固定数据(以避免垃圾收集器到处移动数据),从而“安全”地使用指针算法,然后您可能需要->。
参见Pointer types (C# Programming Guide)和this example中的一些内容,了解如何在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;
}发布于 2011-06-20 03:06:36
C#不区分指针和引用。实际上,所有东西都是一个引用,所以使用。符号。
编辑:正如下面的评论所指出的,事情并没有那么简单。有引用类型和值类型。我上面的意思是,引用类型和指针类型之间没有区别。
Edit2:虽然如果你使用的是c#的不安全部分,显然是有的!今天我学到了一些东西!
发布于 2012-03-03 00:44:45
有趣的是,C#决定使用.而不是->来引用类引用所引用的对象的成员,因为其语义更接近C的->操作符,而不是.操作符。例如,在C中,如果看到a=b; a.X=5;代码,就会意识到它正在写入某个结构a的字段X,这是一个与b不同的结构。相反,如果看到a=b; a->X=5;代码,就会认识到它写入的是a和b都指向的结构的字段X。在C#中,相关代码的行为将取决于b的类型是类还是结构。
但是,如果C#为类和结构类型使用了不同的解引用运算符,那么向C#添加泛型将会很困难,因为特定的代码片段可能会解引用接口约束类型的实例,而不知道所讨论的类型是结构还是类;如果结构使用了不同于类的运算符,则不清楚应该使用哪个运算符。
https://stackoverflow.com/questions/6405212
复制相似问题