March 15, 2014

Understanding Namespaces in c#




Understanding Namespace in C#

1000’s and 1000’s of classes are defined in .NET framework and all these classes are organized under different Namespaces. You can think of Namespaces as boxes with Names on it and all the classes relevant to the box are put in it – Under that namespace, so when a class is used we can refer to the class as namespace.class name.

In C# namespaces are used extensively - first while using the .NET classes, their respective namespaces are used and secondly while creating our own types – we are creating our own / user defined namespaces.




Having namespaces helps you to control the scope of the class and its methods. If there are no namespaces, we would not be able to use multiple classes having same name. Eg. we can have a class called Console having a method WriteLine under namespace MyNamespace – (MyNameSpace.Console.WriteLine - . I agree - it’s a bad idea to create such class and method. As we already know there’s a similar class in .NET framework under System Namespace. System.Console.WriteLine.

But in reality we might come across such situation where in we have same class name as a class in .Net framework or a third party dlls is having a same class name, in such cases namespaces help us to differentiate the classes and use them efficiently.

Note:  Visual Studio IDE helps us to organize the classes under different namespaces, by defaulting the project name as namespace of the class, but it is not mandatory. Namespaces do not refer to or correspond to a file or a directory.



Using namespaces:- A class can be invoked from a namespace using 3 ways.
  1.     Writing the fully qualified name ( see below example)
  2.     Implementing the using directive,
  3.     Implementing using alias ( see below example

Note: The above ways are used for calling classes for both .NET namespaces or from custom/ own namespaces.


The using directive allows us to use the classes / types without having to specify the namespace. 
The using alias allows us to create and identifier for a namespace or class. The identifier is assigned a fully qualified name. Ex using project = MyNamesapce.MyClassName;
Namespace alias qualifier:

The namespace alias qualifier (::) is used search for identifiers. It is used to reference a namespace alias and global:: us used to reference the global namespace. (Note: global is not an predefined alias qualifier, it gets this special status after its used with (::). Also you cannot used the global word with using alias (eg. Using global = MyNamespace.MyClass), this is a compiler error, because as mentioned earlier, global:: always reference the global namespace and not and alias.

Use of Global namespace alias:- 
global:: - is used to access the global namespace.
The global namespace access is required in scenarios where the user defined class / type has the same name as the system defined .NET class and the System defined class is now hidden from in the current namespace – See below example.
    



No comments:

Post a Comment