我正在写一个与树型数据结构一起工作的应用程序。我用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构造函数时
*
修改类型(他们已经为空) - 没有特别的
->
运营商为会员访问 - 没有必要写一个析构函数(虽然查找
IDisposable
)
指针和引用之间的重要区别:后者不支持指针运算! – 2010-02-25 11:47:19
@Joachim - 让我们都祈祷他在他的树结构中通常不使用指针算术。 – 2010-02-25 11:58:21
感谢您的帮助。 – 2010-02-25 13:01:32
C#中是否还有指针?
Yes,使用语法int* varName;
声明。
正在使用该安全吗?
无指针是不安全。
有没有指针构建数据结构的安全方法。如果节点是类,那么它们将自动变为reference types,所以你不需要任何指针。否则,你可以box them into a reference。
有趣的答案。不幸的是,与yes部分的链接似乎被破坏了(即下载完整vs 2005文档而不是特定的语言特性)。拳击/拆箱给人的印象是安全的;为什么不是? – Christophe 2017-11-02 09:02:59
@Christophe谢谢,修复了损坏的链接。还澄清了措辞,拳击/ unobxing是安全的方法来避免不安全的指针。 – kennytm 2017-11-02 13:12:51
更清晰!谢谢 – Christophe 2017-11-02 13:51:32
http://blogs.msdn。COM/jaredpar /存档/ 2008/11/11 /妥善递增-AN-intptr.aspx – 2010-02-25 12:26:27
有一个伟大的系列赛上MSDN中的.Net 2实现的数据结构。
它们包括的东西像二叉树,图,SkipList,节点列表等示例代码的代码非常完整,包括为什么这些结构工号的文档的页面等
没有一个来自Microsoft的人使用指针。一般来说,你从不需要在C#中使用它们。有时候使用它们会很好,或者它们只是您从C++中思考的方式。但是你通常可以找到一种不使用它们的方法。
不使用不安全代码指针的最大原因是您失去了中等信任合规性。你不能运行像click一样的机制,asp.net网站和Silverlight也不允许它们。坚持参考和完全管理的概念,以确保您的代码可以在更多地方运行。
- 1. 这是安全的吗? (qt QQueue.dequeue()C++内联指针解引用)
- 2. C++ - 数组是一个指针吗?
- 3. 预处理器指令行可以像C中一样用在C#中吗?
- 4. 请参阅C++中的指针吗
- 5. C++中的指针赋值原子吗?
- 6. 是一个指向STL容器安全的指针吗?
- 7. 在C++类中做指针数学:它是“合法”吗?
- 8. C#指向变量的指针 - 我可以避免它吗?
- 9. C中的Fopen/fread/fgets PID安全吗?
- 10. 是C#中的CreateDirectory()线程安全吗?
- 11. C++是具有指针和引用的单一语言吗?
- 12. 是C#6吗? (猫王op)线程安全吗?如果是这样,怎么样?
- 13. 你可以在C++中声明一个指针作为extern吗?
- 14. 我可以在C中创建一个Char指针数组吗?
- 15. C#或Visual C#都是一样的吗?
- 16. C#或C++;可以像CE中一样修改内存吗?
- 17. 应该在策略模式中使用安全指针吗?
- 18. 指针,我正确使用它们吗? Objective-C的/可可
- 19. Haskell有指针吗?
- 20. C中有堆栈指针快吗? (没有间接但仍堆)
- 21. 指望strtok_r的内部指针安全吗?
- 22. 像C++中的C#方法指针
- 23. C++是“类名*”类指针吗?
- 24. 正在返回一个指向静态局部变量安全的指针吗?
- 25. Objective-C中的所有对象基本都是指针吗?
- 26. 数组名称是C++中的一个常量指针吗?
- 27. C socket API是线程安全的吗?
- 28. C++智能指针可以完全封装其数据吗?
- 29. C#中的XML intellisense和VB.Net一样吗?
- 30. WebSockets ...它们不安全吗?
请问,您可以先在SO上搜索这些关键字,然后只询问尚未涵盖的内容。 – 2010-02-25 11:28:35
带指针的代码必须标记为'unsafe',猜猜原因。 – nothrow 2010-02-25 11:30:53
实际上使用指针在任何地方都不安全;) – 2010-02-25 11:36:09