internal DomainObject(IntPtr handle, AddRef addRef, DelRef delRef, bool preIncremented) { ThrowHelper.ThrowIfNull(addRef, "addRef"); ThrowHelper.ThrowIfNull(delRef, "delRef"); ThrowHelper.ThrowIfZero(handle, "handle"); _addRef = addRef; _delRef = delRef; if (!preIncremented) { ThrowHelper.ThrowIfError(_addRef(handle)); } Handle = handle; lock (_objectsToDispose) { _objectsToDispose.Add(this); } }
protected virtual void Dispose(bool disposing) { if (_disposed) { return; } DelRef release = _delRef; if (disposing) { _delRef = null; _addRef = null; } if (release != null && Handle != IntPtr.Zero) { release(Handle); } Handle = IntPtr.Zero; _disposed = true; }
internal AbstractAsyncLoadable(IntPtr handle, AddRef addRef, DelRef delRef, bool preIncremented) : base(handle, addRef, delRef, preIncremented) { }