我有各种包装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
每次都返回一个新的,我可以查一下。但这会带来线程问题,对吧?
有没有更好的办法?