Basically, you want to invalidate a living reference. This would break the key assumption of languages with automatic memory management, which is the impossibility of derefencing invalid pointers. At least in Java this is surely impossible and I invite a C# expert to contribute to this community wiki with C#-specific information.
Towards the solution of your requirement: you must encapsulate the reference to your object inside another one and never let the reference escape, so as to ensure 100% ownership of that reference. So the outside object will need to have the complete API of the inside object replicated, basically the Decorator pattern.
If you do that, you'll have the option to set the internal reference to null
at any time and thus reliably release the object.