Assemblies are not just the typically used unit of deployment for .NET code, they also have a runtime impact with regard to protection. The internal visibility modifier embodies precisely this in the C# language, restricting access to types or members to the current assembly only.
Note: Reflection as an Escape Valve?
Visibility is enforced by the runtime, as discussed later, such that it isn’t possible for code to invoke methods or access members that it doesn’t have access to. However, using reflection services, it’s possible to bypass visibility checks. To prevent this from happening, other security measures have to be put in place with regard to partial trust applications. Refer to MSDN for more about these code security ...