ツリーデータ構造で動作するアプリケーションを作成しています。 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);
興味がある点:
*
で型を変更する必要はありません->
演算子はありませんIDisposable
を検索します)[〜#〜] yes [〜#〜]。 C#にはポインターがあります。
[〜#〜] no [〜#〜]。それらは[〜#〜] not [〜#〜]安全です。
C#でポインターを使用する場合、実際にはキーワードunsafe
を使用する必要があります。
たとえば、ここおよび[〜#〜] msdn [ 〜#〜]。
static unsafe void Increment(int* i) { *i++; } Increment(&count);
代わりにこれを使用すると、コードは安全でクリーンになります。
static void Increment(ref int i)
{
i++;
}
Increment(ref count);
はい、ポインターがあります: IntPtr
MSDNの.Net 2には、一連の優れたデータ構造が実装されています。
バイナリ検索ツリー、グラフ、SkipList、NodeListなどのサンプルコードが含まれています。コードは非常に完全で、これらの構造が機能する理由などに関するドキュメントのページが多数含まれています。
Microsoftのものはどれもポインターを使用しません。一般的に、C#でそれらを使用する必要はありません。それらを使用するのがいい場合もありますが、C++から考える方法でもあります。しかし、通常はそれらを使用しない方法を見つけることができます。
ポインターに安全でないコードを使用しない最大の理由は、Medium Trustコンプライアンスを失うことです。クリック1回、asp.net Webサイトなどのメカニズムを実行することはできません。Silverlightもそれらを許可しません。参照と完全に管理された概念に固執して、コードをより多くの場所で実行できるようにします。