C#中有像C ++一样的指针吗? 安全吗?

我正在编写一个与树型数据结构一起工作的应用程序。 我用C ++编写了它,现在我想用C#编写它。 我使用指针来实现树型数据结构。 C#中是否有指针? 使用它安全吗?

如果你正在C#(或者Java,或者其他许多语言)中实现一个树结构,你可以使用引用而不是指针。 NB。 C ++中的引用与这些引用不一样。

这个用法大部分都是类似于指针的,但是像垃圾回收这样有很多优点。

class TreeNode { private TreeNode parent, firstChild, nextSibling; public InsertChild(TreeNode newChild) { newChild.parent = this; newChild.nextSibling = firstChild; firstChild = newChild; } } var root = new TreeNode(); var child1 = new TreeNode(); root.InsertChild(child1); 

兴趣点:

  • 声明成员时不需要修改*
  • 不需要在构造函数中将它们设置为null(它们已经是null)
  • 没有特殊的->运营商成员访问
  • 无需编写析构函数(尽pipe查找IDisposable

是的 。 在C#中有指针。

NO 。 他们不安全。

在C#中使用指针时,实际上必须使用unsafe关键字。

例如,看看这里MSDN

 static unsafe void Increment(int* i) { *i++; } Increment(&count); 

代之以使用此代码将是安全和清洁。

 static void Increment(ref int i) { i++; } Increment(ref count); 

C#中还有指针吗?

是的 ,使用语法int* varName;

正在使用那个安全吗?

没有指针是不安全的

有没有指针构造一个数据结构的安全方法。 如果节点是类,那么它们将自动成为引用types,所以你不需要任何指针。 否则,您可以将它们装入参考 。

是的,有一个指针: IntPtr

维基百科: “这是一个安全的pipe理相当于int *,并不需要不安全的代码”

在MSDN的.Net 2中有一系列的数据结构。

数据结构第1部分

它们包括二进制search树,Graph,SkipList,NodeList等代码示例。代码非常完整,并包含许多关于这些结构为什么工作的文档页面等。

没有一个来自微软的使用指针。 一般来说,你不需要在C#中使用它们。 有时候使用它们会很好,或者它们只是你从C ++中思考的方式。 但是你通常可以find一个不使用它们的方法。

不使用不安全代码指针的最大原因是您失去了中等信任合规性。 你不能通过点击一次的机制,asp.net网站,而Silverlight也不允许它们。 坚持参考和完全pipe理的概念,以确保您的代码可以运行在更多的地方。