O'Reilly logo

C# in a Nutshell by Peter Drayton, Ted Neward, Ben Albahari

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required