views:

292

answers:

6

Hi, I write an application that work with tree data structure. I written it with C++, now i want to write it by C#. I use pointers for implementing tree data structure. Is there pointer in C# too? Is using of that safe?

+7  A: 

Is there pointer in C# too?

Yes

Is using of that safe?

No

If the nodes are classes, then they'll automatically be reference types so you don't need any pointers. Otherwise, you can box them into a reference.

KennyTM
A: 

Have a look at ref keyword on MSDN

LnDCobra
+5  A: 
TheMachineCharmer
Talk about self documenting code!
LiraNuna
@LiraNuna wait wait! :D I ll be back soon.
TheMachineCharmer
+9  A: 

If you're implementing a tree structure in C# (or Java, or many other languages) you'd use references instead of pointers. NB. references in C++ are not the same as these references.

The usage is similar to pointers for the most part, but there are advantages like garbage collection.

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);

Points of interest:

  • No need to modify the type with * when declaring the members
  • No need to set them to null in a constructor (they're already null)
  • No special -> operator for member access
  • No need to write a destructor (although look up IDisposable)
Daniel Earwicker
Important difference between pointers and references: The latter doesn't support pointer arithmetic!
Joachim Sauer
@Joachim - let's all pray he doesn't normally use pointer arithmetic in his tree structures.
Daniel Earwicker
@Earwicker : thank you for your help.
masoud ramezani
A: 

Yes, there is a pointer: IntPtr

Wikipedia: "which is a safe managed equivalent to int*, and does not require unsafe code"

Tuomas Hietanen
http://blogs.msdn.com/jaredpar/archive/2008/11/11/properly-incrementing-an-intptr.aspx
Tuomas Hietanen
A: 

There is a great series of Data Structures implemented in .Net 2 on MSDN.

Data Structures Part 1

They include sample code for things like Binary Search Tree, Graph, SkipList, NodeList, etc. The code is quite complete and includes a number of pages of docs about why these structures work, etc.

None of the ones from Microsoft use pointers. In general you never NEED to use them in C#. There are times when using them would be nice, or they are just the way you think from C++. But you can usually find a way not to use them.

The biggest reasons why not to use unsafe code for pointers is that you lose Medium Trust compliance. You can't run through mechanisms like click once, asp.net websites, and Silverlight doesn't allow them either. Stick with refs and fully managed concepts to ensure your code can run in more places.

Jason Short