If you do not work in your class with unmanaged resources and you do not plan to use your class with using, then you do not need to implement IDisposable. And zeroing links is also not necessary.
The Dispose method is defined in the IDisposable interface, which is used in the .NET Framework in different classes.
It is possible to look at implementation of IDisposable in source codes . (No one here will argue that in the source .NET correct implementation of this interface).
There you can also look at the comments .NET developers
On the screenshot of the page on the right - the comments of the developers, and on the left - these are links to the implementation of IDisposable in different classes.
One example implementation of IDisposable from the .NET Framework:
class SimpleMonitor : IDisposable { public void Enter() { ++ _busyCount; } public void Dispose() { -- _busyCount; } public bool Busy { get { return _busyCount > 0; } } int _busyCount; }
Taken here . Nothing special, this is if you do not need to work with unmanaged resources.
IMPORTANT: when working with unmanaged resources, you should use SafeHandle .
An example is here , and a brief description under the screenshot.
Read the class description in MSDN, look at the implementation in the source code , also look at the base classes. Obviously, everything is quite complicated there. Therefore, do not invent bicycles, despite the fact that some offer it with a serious look :)

How to use SafeHandle?
For example, you need to use the WinAPI function FindFirstFileEx to get information about the folder. The function returns HANDLE - this is an unmanaged resource, which must be freed with the help of WinAPI function FindClose .
In such a situation, the SafeHandle class must be defined
using Microsoft.Win32.SafeHandles; class SafeHandle : SafeHandleZeroOrMinusOneIsInvalid { private SafeHandle() : base(true) { } protected override bool ReleaseHandle() { return FindClose(this.handle); } }
And specify SafeHandle in the function definition
static extern SafeHandle FindFirstFileEx(...)
In our class we write
var h = FindFirstFileEx(...);
Thus we get a link to a special wrapper over an unmanaged resource. And even if an unexpected interruption of the flow or stack overflow, etc., occurs, the FindClose function will be called, i.e. guaranteed to be closed handle unmanaged resource.
A working example is here .