C# | Espacios de nombres

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *