12.3 Scoping Types and Type References
The assembly boundary
also forms a type accessibility
boundary: the C# internal accessibility modifier
allows types to restrict method accessibility to a single assembly.
Additionally, references to types are always scoped by the assembly
in which the type resides—the unique reference for a type
(known as a TypeRef) is the combination of a
reference to the assembly it was defined in and the fully qualified
type name including any namespaces. For example, this local variable
declaration:
System.Net.WebRequest wr;
is represented in MSIL as follows:
.assembly extern System.Net { .ver 1:0:2914:16 ... }
.locals(class [System.Net]System.Net.WebRequest wr)
As you can see from this example, in order to reference a type
unambiguously, we need to be able to identify the assembly that
contains it unambiguously. The .NET Framework's
mechanism for naming assemblies is very powerful, and is a giant step
beyond the use of ProgIDs and GUIDs in classic COM development.
|