Los espacios de nombres se utilizan para organizar las clases. Ayuda a controlar el alcance de los métodos y clases en proyectos de programación .Net más grandes. En palabras más simples, puede decir que proporciona una forma de mantener un conjunto de nombres (como los nombres de clase) diferente de otros conjuntos de nombres. La mayor ventaja de usar el espacio de nombres es que los nombres de clase que se declaran en un espacio de nombres no chocarán con los mismos nombres de clase declarados en otro espacio de nombres. También se denomina grupo de clases con nombre que tienen características comunes. Los miembros de un espacio de nombres pueden ser espacios de nombres, interfaces , estructuras y delegados .
Definición de un espacio de nombres
Para definir un espacio de nombres en C#, usaremos la palabra clave del espacio de nombres seguida del nombre del espacio de nombres y las llaves que contienen el cuerpo del espacio de nombres de la siguiente manera:
Sintaxis:
namespace name_of_namespace { // Namespace (Nested Namespaces) // Classes // Interfaces // Structures // Delegates }
Ejemplo:
// defining the namespace name1 namespace name1 { // C1 is the class in the namespace name1 class C1 { // class code } }
Acceso a los miembros del espacio de nombres
Se accede a los miembros de un espacio de nombres mediante el operador punto (.). Una clase en C# se conoce completamente por su respectivo espacio de nombres.
Sintaxis:
[namespace_name].[member_name]
Nota:
- Se pueden crear dos clases con el mismo nombre dentro de 2 espacios de nombres diferentes en un solo programa.
- Dentro de un espacio de nombres, dos clases no pueden tener el mismo nombre.
- En C#, el nombre completo de la clase comienza con el nombre del espacio de nombres seguido del operador de punto (.) y el nombre de la clase, que se denomina el nombre completo de la clase.
Ejemplo:
// C# program to illustrate the // use of namespaces // namespace declaration namespace first { // name_1 namespace members // i.e. class class Geeks_1 { // function of class Geeks_1 public static void display() { // Here System is the namespace // under which Console class is defined // You can avoid writing System with // the help of "using" keyword discussed // later in this article System.Console.WriteLine("Hello Geeks!"); } } /* Removing comment will give the error because no two classes can have the same name under a single namespace class Geeks_1 { } */ } // ending of first namespace // Class declaration class Geeks_2 { // Main Method public static void Main(String []args) { // calling the display method of // class Geeks_1 by using two dot // operator as one is use to access // the class of first namespace and // another is use to access the // static method of class Geeks_1. // Termed as fully qualified name first.Geeks_1.display(); } }
Producción:
Hello Geeks!
En el ejemplo anterior:
- En System.Console.WriteLine() ” “ System ” es un espacio de nombres en el que tenemos una clase llamada “ Console ” cuyo método es “ WriteLine() “.
- No es necesario mantener cada clase en C# dentro de Namespace pero lo hacemos para organizar bien nuestro código.
- Aquí “ . ” es el delimitador utilizado para separar el nombre de la clase del espacio de nombres y el nombre de la función del nombre de la clase.
La palabra clave usando
En realidad, no es práctico llamar a la función o clase (o puede decir miembros de un espacio de nombres) cada vez usando su nombre completo. En el ejemplo anterior, System.Console.WriteLine(“¡Hola, Geeks!”); y primero.Geeks_1.display(); son el nombre completo. Entonces, C# proporciona una palabra clave » usando » que ayuda al usuario a evitar escribir nombres completamente calificados una y otra vez. El usuario solo tiene que mencionar el nombre del espacio de nombres al inicio del programa y luego puede evitar fácilmente el uso de nombres totalmente calificados.
Sintaxis:
using [namespace_name][.][sub-namespace_name];
En la sintaxis anterior, el punto (.) se usa para incluir nombres de subespacios de nombres en el programa.
Ejemplo:
// predefined namespace name using System; // user-defined namespace name using name1 // namespace having subnamespace using System.Collections.Generic;
Programa:
// C# program to illustrate the // use of using keyword // predefined namespace using System; // user defined namespace using first; // namespace declaration namespace first { // name_1 namespace members // i.e. class class Geeks_1 { // function of class Geeks_1 public static void display() { // No need to write fully qualified name // as we have used "using System" Console.WriteLine("Hello Geeks!"); } } } // ending of first namespace // Class declaration class Geeks_2 { // Main Method public static void Main(String []args) { // calling the display method of // class Geeks_1 by using only one // dot operator as display is the // static method of class Geeks_1 Geeks_1.display(); } }
Producción:
Hello Geeks!
Espacios de nombres anidados
También puede definir un espacio de nombres en otro espacio de nombres que se denomina espacio de nombres anidado. Para acceder a los miembros del espacio de nombres anidado, el usuario debe usar el operador punto (.).
Por ejemplo, Generic es el espacio de nombres anidado en el espacio de nombres de las colecciones como System.Collections.Generic
Sintaxis:
namespace name_of_namespace_1 { // Member declarations & definitions namespace name_of_namespace_2 { // Member declarations & definitions . . } }
Programa:
// C# program to illustrate use of // nested namespace using System; // You can also use // using Main_name.Nest_name; // to avoid the use of fully // qualified name // main namespace namespace Main_name { // nested namespace namespace Nest_name { // class within nested namespace class Geeks_1 { // Constructor of nested // namespace class Geeks_1 public Geeks_1() { Console.WriteLine("Nested Namespace Constructor"); } } } } // Driver Class class Driver { // Main Method public static void Main(string[] args) { // accessing the Nested Namespace by // using fully qualified name // "new" is used as Geeks_1() // is the Constructor new Main_name.Nest_name.Geeks_1(); } }
Producción:
Nested Namespace Constructor
Publicación traducida automáticamente
Artículo escrito por piyush25pv y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA