namespace (C# Reference)
The namespace keyword is used to declare a scope that contains a set of related objects. You can use a namespace to organize code elements and to create globally unique types.
Within a namespace, you can declare one or more of the following types:
Whether or not you explicitly declare a namespace in a C# source file, the compiler adds a default namespace. This unnamed namespace, sometimes referred to as the global namespace, is present in every file. Any identifier in the global namespace is available for use in a named namespace.
Namespaces implicitly have public access and this is not modifiable. For a discussion of the access modifiers you can assign to elements in a namespace, see Access Modifiers (C# Reference).
It is possible to define a namespace in two or more declarations. For example, the following example defines two classes as part of the MyCompany namespace:
For more information, see the C# Language Specification. The language specification is the definitive source for C# syntax and usage.
Its often espoused that you should have one namespace per assembly. While an assembly should have a purpose and not be a dumping ground, I've found this leads to awkward API design.
The reason is that assemblies have two functions; a) a unit of distribution of types/code b) the ability to have internal and external implementation.
The latter is key, if you can only put all code related to a certain function in one namespace, then you've no way to layer-up the API so that you can release a built assembly into another team (a) that exposes the public API in a way that is self-documenting (the other team would presumably build upon the namespace and add their types to the same namespace, but within a different assembly (b)).
Edit by SJ at MSFT: I don't see that advice in the topic. Is this just a general comment about namespaces, or am I reading over it?
- 8/22/2011
- LukePuplett
- 9/12/2011
- SJ at MSFT