Very good article explaining why “it's impossible to give someone an assembly and restrict them from calling certain methods or accessing certain variables.”  Reflections can be used to call private methods of an assembly, and if .Net Security policy prevents that (such as LinkDemand), one (admin) can always disable code access security altogether (caspol -s off).