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

时间:2010-02-25 11:26:17

标签: c# c++ data-structures tree

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

5 个答案:

答案 0 :(得分:41)

如果您在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(它们已经为空)
  • 没有特殊的->运营商进行会员访问
  • 无需编写析构函数(尽管查找IDisposable

答案 1 :(得分:31)

即可。 C#中有指针。

即可。他们安全。

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

例如,请看 here MSDN

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

Increment(&count);

使用此代码,代码将为SAFE和CLEAN。

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

Increment(ref count);

答案 2 :(得分:19)

  

C#中也有指针吗?

Yes,使用语法int* varName;声明。

  

使用那种安全吗?

没有指针不安全

有一些安全的方法可以在没有指针的情况下构建数据结构。如果节点是类,那么它们将自动为reference types,因此您不需要任何指针。否则,您可以box them into a reference

答案 3 :(得分:4)

答案 4 :(得分:2)

在MSDN上的.Net 2中实现了一系列很好的数据结构。

Data Structures Part 1

它们包括二进制搜索树,图形,SkipList,NodeList等内容的示例代码。代码非常完整,包含许多关于这些结构工作原理的文档页面等。

微软的所有人都没有使用指针。一般来说,你永远不需要在C#中使用它们。有时使用它们会很好,或者它们只是你用C ++思考的方式。但是你通常可以找到一种不使用它们的方法。

不使用不安全代码指针的最大原因是您失去了中信任合规性。您无法运行诸如单击一次,asp.net网站等机制,Silverlight也不允许这样做。坚持使用refs和完全托管的概念,以确保您的代码可以在更多地方运行。