我正在编写一个使用树数据结构的应用程序。我用C ++编写它,现在我想用C#编写它。我使用指针来实现树数据结构。 C#中还有一个指针吗?使用它是否安全?
答案 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);
兴趣点:
*
修改类型
->
运营商进行会员访问IDisposable
)答案 1 :(得分:31)
是即可。 C#中有指针。
否即可。他们不安全。
在C#中使用指针时,实际上必须使用关键字 unsafe
。
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)
是的,有一个指针: IntPtr
维基百科:"which is a safe managed equivalent to int*, and does not require unsafe code"
答案 4 :(得分:2)
在MSDN上的.Net 2中实现了一系列很好的数据结构。
它们包括二进制搜索树,图形,SkipList,NodeList等内容的示例代码。代码非常完整,包含许多关于这些结构工作原理的文档页面等。
微软的所有人都没有使用指针。一般来说,你永远不需要在C#中使用它们。有时使用它们会很好,或者它们只是你用C ++思考的方式。但是你通常可以找到一种不使用它们的方法。
不使用不安全代码指针的最大原因是您失去了中信任合规性。您无法运行诸如单击一次,asp.net网站等机制,Silverlight也不允许这样做。坚持使用refs和完全托管的概念,以确保您的代码可以在更多地方运行。