Access modifiers
Access modifiers are keywords that specify the accessibility level
of a type or a type member. They control whether a type or a type
member can be used (accessed) from other code in our assembly
or other assemblies.
There are 4 access modifiers and 6 accessibility levels.
Top-level types, i.e. types which are not nested in other types, or
types declared directly within a namespace, can have one of 2
access modifiers: public or internal. By default, they are internal.
internal means that this element can be accessed only from code
in the current assembly. In other words, it cannot be accessed
from code outside the assembly.
public means access is not restricted. That is, the element can be
accessed from code inside the assembly as well as code outside the
assembly.