をラップするさまざまなクラスがありIntPtr
ます。独自のデータ(ポインター以外)を格納しませんが、代わりにプロパティとメソッドを使用して、アンマネージライブラリを使用してポインターでデータを公開します。それはうまく機能しますが、他のラッパーオブジェクトからこれらのラッパーオブジェクトを参照できるようにする必要があるところまで来ました。例えば:
public class Node {
private IntPtr _ptr;
public Node Parent {
get { return new Node(UnmanagedApi.GetParent(_ptr)); }
}
internal Node(IntPtr ptr) {
_ptr = ptr;
}
}
これで、(上記のように)単純に返すことができますnew Node(parentPtr)
が、数万のノードを持つ可能性があります。複数のラッパーオブジェクトが同じものを参照する可能性があるため、これは悪い考えではないでしょうIntPtr
か。
これを修正するにはどうすればよいですか?それぞれをキーとして使用する静的KeyedCollection
クラスを使用することを考えました。だから、毎回IntPtr
新しいものを返す代わりに、私はそれを調べることができます。Node
しかし、それはスレッドの問題を引き起こしますよね?
もっと良い方法はありますか?