> For example could it represent RAII with an imaginary destructor in C# reasonably well?
Not going to comment on the rest of your post, but just in case you didn't know, there's no need for an imaginary destructor in C#, as it already has one.[1]
The reason it's not really much known (or used) is because of its indeterminstic GC-tied nature.
I think the only "valid" usage I've seen for it is as a fallback method for IDisposable objects which are not getting cleaned up as they should (and as a way of tracing that in debug-builds).