InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial C#
Introduccion a C#
Programacion con C#
Fundamentos de C#
Operadores
Instrucciones
Estrcuturas de control.
Definición de clases
Creación de objetos
Herencia y métodos virtuales
Polimorfismo
Ocultación de miembros
Miembros de tipo
Encapsulación
Espacios de nombres
Importación de espacios de nombres
Espacio de nombres distribuidos
Variables y tipos de datos
Tablas unidimensionales
Tablas multidimensionales
La clase System.Array
Cadenas de texto
Constantes
Orden de inicialización de variables
Métodos
Métodos externos
Constructores
Destructores
Propiedades
Indizadores
Redefinición de operadores
Delegados y eventos
La clase MulticastDelegate
Llamadas asíncronas
Implementación interna de los delegados
Eventos
Estructuras
Boxing y unboxing
Constructores de estructuras
Enumeraciones
Interfaces
Excepciones
Otras instrucciones
Atributos
Definición de nuevos atributos
Lectura de atributos en tiempo de ejecución
Atributos de compilación
Pseudoatributos
Código inseguro
Definición de punteros
Manipulación de punteros
Operadores relacionados con código inseguro
Fijación de variables apuntadas
Novedades de C# 2.0
Genéricos
Tipos parciales
Iteradores
Mejoras en la manipulación de delegados
Tipos anulables
Modificadores de visibilidad de bloques get y set
Clases estáticas
Referencias a espacios de nombres
Supresión temporal de avisos
Atributos condicionales
Incrustación de tablas en estructuras
Modificaciones en el compilador
También puedes ver ...
Creando cadenas de conexión ConnectionStrings en .net 3.5 o visual Studio 2008 usando SqlConnectionStringBuilder
Migración de WSE a WCF (Web Services de 2005 a 2008)
Generar archivos PDF con C#
TransactionScope - Simplificando el trabajo con transacciones.
LinQ To SQL - Un ejemplo sencillo
Cómo activar Intelisense (autocompletado) en el Web.config
Leer un campo XML de SQL Server 2005 con C#
TripleDES - Un ejemplo practico en C#
Mostrar un GridView dentro de un DataList
String.Format

Afiliados
La Web del programador
MundoProgramacion


 

Referencias a espacios de nombres

Alias global y calificador ::

    En C# 1.1 puede producirse conflictos a la hora de resolver las referencias a ciertas clases cuando en anidaciones de espacios de nombres existan varias clases y/o espacios de nombres homónimos. Por ejemplo, en el siguiente código:


 using System;
 namespace Josan
 {
  class A
  {
     static void Main(string[] args)
     {
      Método();
     }
     static void Método()
     {
      Console.WriteLine("Josan.System.A.Método()");
      A.Método();
     }
  }
 }
 class A
 {
  static void Método()
  {
   Console.WriteLine("A.Método()");
  }
 }

    Resulta imposible llamar desde el método Método() de la clase Josan.A a su homónimo en  la clase A del espacio de nombres global, por lo que la llamada A.Método() producirá un bucle recursivo infinito y la salida del programa será del tipo:

Josan.System.A.Método()

Josan.System.A.Método()

Josan.System.A.Método()

    Para solucionar esto, C# 2.0 introduce la posibilidad de hacer referencia al espacio de nombres global a través de un alias predefinido denominado global y un calificador :: que se usa de la forma <inicio>::<referencia> y permite indicar el punto de <inicio> en la jerarquía de espacios de nombres a partir del que se ha de resolver la <referencia> al tipo o espacio de nombres indicada. Estas referencias se podrán usar en cualquier parte en la que se espere un nombre de tipo o espacio de nombres, tal como una sentencia using, la creación de un objeto con new,... Así, el ejemplo anterior podría resolverse como sigue:


 using System;
 namespace Josan
 {
  class A
  {
     static void Main(string[] args)
     {
      Método();
     }
     static void Método()
     {
      Console.WriteLine("Josan.System.A.Método()");
      global::A.Método();
     }
  }
 }
 class A
 {
  public static void Método()
  {
   Console.WriteLine("A.Método()");
  }
 }

Y ahora ya sí que se obtendría la salida buscada:

Josan.System.A.Método()

A.Método()

Alias externos

    C# 2.0 va un paso más allá en lo referente a resolver conflictos de ambigüedades en los nombres de los identificadores respecto a C# 1.X. Ahora no solo se pueden usar clases con el mismo nombre siempre y cuando se hallen en espacios de nombres diferentes sino que también se permite usar clases con el mismo nombre y espacio de nombres que se hallen en diferentes ensamblados. Para ello se usan los denominados alias externos.

    Antes de las importaciones de espacios de nombres (using) se puede incluir líneas con la siguiente sintaxis:

 extern alias <nombreAlias>; 
  
    Con esto se estará diciendo al compilador que durante las comprobaciones de sintaxis admita a la izquierda del calificador :: las referencias al alias de espacio de nombres cuyo nombre se le indica.. Cada una de estas referencias se corresponderán con uno o varios ensamblados externos dentro de cuyos espacios de nombres se intentarán resolver la referencia indicada a la derecha del ::. La correspondencia entre estos ensamblados y sus alias se indicarán al compilador de C# mediante parámetros que se podrán pasar en la línea de comandos al hacerles referencia mediante la opción /r siguiendo la sintaxis <nombreAlias>=<rutaEnsamblado> para los valores de la misma; o en el caso de VS.NET 2005, desde la ventana de propiedades de la referencia al ensamblado en la solución.

    Por ejemplo, se puede tener un fichero miclase1.cs con el siguiente contenido:


 using System;
 public class MiClase 
 {
  public void F()
  {
   Console.WriteLine("F() de mi miclase1.cs");
  }           
 }

Y otro miclase2.cs con una clase homónima a MiClase:


 using System;
 public class MiClase 
 {
  public void F()
  {
   Console.WriteLine("F() de mi miclase2.cs");
  }
 }

    Para usar ambas clases a la vez en un fichero extern.cs bastaría escribirlo como sigue:


 extern alias X;
 extern alias Y;
 class Extern
 {
  static void Main()
  {
   X::MiClase objeto = new X::MiClase();
   objeto.F();
   Y::MiClase objeto2 = new Y::MiClase();
   objeto2.F();
  }
 }

    Y compilar todo el conjunto con:


csc extern.cs /r:X=miclase1.dll /r:Y=miclase2.dll

csc extern.cs /r:X=miclase1.dll /r:Y=miclase2.dll

    Al ejecutarlo podrá comprobarse que la salida demuestra que cada llamada se ha hecho a uno de los diferentes tipos MiClase:

F() de mi miclase1.cs

F() de mi miclase2.cs

Nótese que es perfectamente válido asociar un mismo alias a varios ensamblados y varios alias a un mismo ensamblado. Lo que no se puede es incluir varias definiciones de alias en una misma opción /r, sino que para ello habría que utilizar opciones /r diferentes tal como se ha hecho en el ejemplo. Es decir, la siguiente llamada al compilador no sería correcta:

 csc extern.cs /r:X=miclase1.dll,Y=miclase2.dll

 

 


Inicio | Tutorial C# Clases estáticasTutorial C#Supresión temporal de avisos Versión para imprimir Foros de consulta


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial C# Clases estáticasTutorial C#Supresión temporal de avisos Versión para imprimir

Referencias a espacios de nombres
Autor: José Antonio González Seco
Visitas: 3929 Fecha de publicación: 11/01/2007
José Antonio es experto en tecnologias Microsoft. Imparte cursos y conferencias en congresos sobre C# y .NET en Universidades de toda España (Sevilla, Barcelona, San Sebastián, Valencia, Oviedo, etc.) en representación de grandes empresas como Microsoft.




Visitas: 308 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 85 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 206 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 935 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 208 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 675 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista
Visitas: 455 | Comentarios: 0 | Archivo: Articulos
Categorias: Linux|BSD
Visitas: 235 | Comentarios: 0 | Archivo: Articulos
Categorias: Programación|Actualidad
18/08/2008 SQL Server 2008
Visitas: 1135 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 789 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ

Útimos temas recibidos en los foros ...
hacer el nombre de una tabla variable por leicolei ... [SQL Server] 1 10/10/2008
Mostar nombre en una sesion de usuario por jhors ... [ASP.NET] 1 10/10/2008
Analista por Rolando ... [SQL Server] 0 10/10/2008
SQL dinámico en TRIGGERS por Alastor ... [ORACLE] 2 03/10/2008
Crystal Reports 8.5 por selvinalberto ... [Visual Basic 6.0] 0 10/10/2008
Agregar Columnas a un datagridview por Tony ... [Visual Basic .NET] 3 20/11/2007
Problema cargando un pl/sql Embebido en Pro*C por ejrivas ... [ORACLE] 0 10/10/2008
ayuda por yo ... [C#] 1 09/10/2008
Verificar conexion a internet por giraldo ... [Visual Basic .NET] 3 11/12/2006
Como pasar un array de textboxes como parámetro a un Sub por Silvana ... [Visual Basic 6.0] 1 09/10/2008
Crear documento de Word desde Java. por Roberto ... [Java] 1 24/11/2007
necesito mi autogenerado por regulo ... [Visual Basic .NET] 0 09/10/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
22/10/2005 Consultar datos. SELECT    forma parte de...Tutorial SQL
22/10/2005 Consultas combinadas. JOINS    forma parte de...Tutorial SQL
19/08/2006 Vitualización. Maquinas Virtuales.
28/08/2006 Ubuntu en VmWare con VMware Tools
01/08/2006 Generar un fichero Excel con C# sin tener Excel instalado
21/02/2006 Introducción a .NET
03/10/2006 Definición de clases    forma parte de...Tutorial C#
22/10/2005 Introducción SQL    forma parte de...Tutorial SQL
03/10/2006 Operadores    forma parte de...Tutorial C#
30/11/2006 Lectura de atributos en tiempo de ejecución    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]