Namespaces are the way that .NET avoids name clashes between classes. A namespace is no more than a grouping of data types, but it has the effect that the names of all data types within a namespace automatically get prefixed with the name of the namespace. It is also possible to nest namespaces within each other.
Or in general we can sya that a namespace uniquely identifies a set of names so that there is no ambiguity when objects having different origins but the same names are mixed together.