After compilation to IL, the information is preserved. A compiled module (DLL) can be referenced by other code and then private/public/protected do matter.
After compilation from IL to native machine code, there is no difference.
Is there any check during runtime whether one can access the member or not?
I'm not totally sure but I would think this is part of the Type-loader. Code that (w/o Reflection) accesses a private variable that it shouldn't know about has to break a rule somewhere.