Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

A namespace is a logical construct for grouping related things across one or more physical files. Unlike a class, namespaces can not be instantiated. Namespaces create a domain in which definitions and declarations (from this point we use the term ItemIdentifiers) live. Items are unique within a namespace, so you can not repeatedly define the same construct, or declare the same variable. A good example of this at the micro-level is a function. When you define a function, you can declare a variable only once within the scope of that function. A namespace's scoping rules operate exactly the same as the function except that the Item Identifier may be referenced from within other namespaces. With this in mind, it should be clear that namespaces allow you to define the same construct, or declare a variable with the same name, repeatedly in different namespaces but not repeated within the namespace.

Namespaces are created the keyword namespace. anything declared/defined within the namespace is owned by the namespace.

Items Identifiers can be referenced using the fully qualified name, consider the following piece of code

...

The variable x class MyClass is declared defined within the namespace "container" at line 7. It is then referenced at line 18 using its fully qualified name container.MyClass.x.

You may have several Items within a namespace that you need to reference. The above approach of prefixing the Items Identifiers with the namespace can be very tedious. The shorthand approach is to tell the compiler that all the Items within a namespace are required in the current namespace. This is done through the use of the using keyword.

...

On line 13 we introduce the use of the using keyword. Line 19 has now been simplified. We no longer need to qualify the Item Identifier with its namespace since the namespaces has been introduced into the current namespace with the using keyword.

Identifier Resolution

Consider the block of code

...

We introduce the container namespace into the csharp_app_struture namespace at line 13

The using keyword must be before any declarations ad definitions within a namespace

Within the csharp_app_struture namespace there are now two Person classes available. When you run this program it will print the value 33. The C# compiler resolves to the last seen definition. So the Person definition at line 14 overrides that seen in line 5.