Well, think about it:
a) Can you tell when the GC is running? If so, how?
The whole idea of a GC is that you can't tell, unless you force the GC to run.
b) Can a program run without the GC running at all? Can you write a program that would never need the GC?
Of course you can! If your Main method creates no objects, and exits immediately, then the GC is never needed because memory never becomes low.
c) Look at the documentation:
MSDN[
^]
It includes the line:
"The Dispose method performs all object cleanup, so the garbage collector no longer needs to call the objects' Object.Finalize override. Therefore, the call to the SuppressFinalize method prevents the garbage collector from running the finalizer."
So yes, you can call SuppressFinalize and it will suppress the destructor call, because the clean-up is already done and does not need to be repeated.
So that leaves D as false.
And the Answer to C covers why.