Вы находитесь на странице: 1из 8

24/4/2014 ENI Training - Libro online

Ensamblados, espacios de nombres y atributos

1. Los ensamblados
Visual C# ha sido diseñado con el Framework .NET, lo que le permite disfrutar de muchas ventajas,
en particular en términos de seguridad durante la ejecución y la gestión de la memoria. También
permite esta imbricación asegurar la compatibilidad entre código escrito en los diferentes lenguajes
disponibles. Así puede utilizar en Visual C# elementos diseñados con otros lenguajes (e
inversamente), de manera totalmente transparente sin que tenga ni siquiera que preocuparse del
lenguaje en el cual ha sido desarrollado el elemento.

El elemento básico de esta reutilización en el Framework .NET es el ensamblado. Se puede


considerar como la agrupación de tipos, recursos y funcionalidades diseñados para funcionar
conjuntamente.

Los ensamblados se almacenan en archivos .exe o .dll, según el tipo. Son generados simplemente
por la compilación del proyecto correspondiente.

Son autodescriptivos, ya que contienen los datos necesarios para su utilización en otro proyecto.
Estos datos están contenidos en el manifestodel ensamblado. El manifestocontiene, entre otras
cosas:

la identidad del ensamblado (su nombre y su versión),

una lista de los archivos utilizados por el ensamblado (por ejemplo, los otros ensamblados
utilizados por éste, los recursos de mapa de bits, etc.).

Para poder utilizar un ensamblado en un proyecto, añada simplemente una referencia hacia el
ensamblado. Para ello, utilice el menú contextual del archivo de referencia del proyecto.

http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 1/8
24/4/2014 ENI Training - Libro online

El siguiente cuadro de diálogo permite entonces elegir las referencias que hay que añadir al
proyecto.

Las diferentes pestañas permiten elegir, según la categoría, el tipo de referencia que hay que
añadir al proyecto:

.NET

El conjunto de los componentes del Framework .NET disponibles.

Solución

Los otros proyectos de la solución actual.

COM

Los componentes COM y ActiveX registrados en el sistema.

Examinar

Búsqueda de un archivo (dll, ocx...) que contiene los recursos.

2. Los espacios de nombres


Los namespaces o espacios de nombres organizan de manera lógica los objetos disponibles en un
ensamblado. Se utilizan para evitar las ambigüedades cuando en un proyecto se añaden referencias

http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 2/8
24/4/2014 ENI Training - Libro online

en unos ensamblados que contienen elementos que tienen nombres idénticos.

Por ejemplo, la clase ListBox existe existe en los


ensamblados System.Web ySystem.Windows.Forms. Si se añaden referencias en un proyecto
hacia estos ensamblados, el compilador se arriesga a no poder determinar cuál de estas clases
desea realmente utilizar.

La utilización del nombre plenamente cualificado, incluyendo el espacio de nombres en el cual se


define la clase, permite resolver este tipo de problema.

Usted puede utilizar, por ejemplo, el siguiente código:

Ejemplo

System.Windows.Forms.ListBox listaWindows;
System.Web.UI.WebControls.ListBox listaWeb;

Sin embargo, la utilización del nombre plenamente cualificado puede hacer pesada la escritura del
código. Es posible utilizar la palabra reservada usingpara aligerar el código. Indica al compilador
que ciertos espacios de nombres están sobreentendidos.

Por ejemplo, la instrucción using System.Data.SqlClient;autoriza la utilización de la siguiente


declaración: SqlConnection ctn, que sin importación del namespace hubiera provocado un error
de compilación:

Las instrucciones usingdeben ser las primeras líneas de código de un archivo fuente Visual C#.

Sin embargo, permanezca atento para no volver a caer en el problema anterior.

La instrucción using propone una solución elegante creando un alias durante la importación del
espacio de nombres.

using ctrlWin=System.Windows.Forms;
using ctrlWeb=System.Web.UI.WebControls;
ctrlWin.ListBox listaWindow;
ctrlWeb.ListBox listaWeb;

Esta solución autoriza la utilización de nombres de una longitud razonable evitando los conflictos.

Cabe observar también que, según el tipo de proyecto en el cual está trabajando, se realizan
referencias e importaciones por defecto.

Los namespaces se declararán en el código usando la palabra reservada namespace seguida el


nombre del namespace y de un bloque de código.

Todos los elementos declarados en este bloque de código serán accesibles al darles un prefijo con
http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 3/8
24/4/2014 ENI Training - Libro online

el nombre del namespace.

namespace Facturacion
{
class Tarificacion
{
public static double CalculoNETO(double Pbruto, double Tasa)
{
return Pbruto * (1 + (Tasa / 100));
}
}
}

En el ejemplo anterior, la función calculoNETOdefinida en la clase Tarificaciones accesible al


darle un prefijo con el nombre del namespace. También hay que observar que Visual Studio añade
automáticamente una instrucción ’namespace’ en el código de todos los elementos que puede
añadir a un proyecto. Utiliza como nombre los datos indicados en las propiedades del proyecto.

En nuestro ejemplo, la función calculoNETOes, por lo tanto, accesible con el siguiente código:

public static void main()


{
double precioNETO=Tarificacion.CalculoNETO(100, 5.5);
}

Utilice la misma técnica en el caso de espacios de nombres anidados; como en el siguiente ejemplo:
http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 4/8
24/4/2014 ENI Training - Libro online

namespace Gestion
{
namespace Paga
{
public class Salario
{
}
}
namespace Facturacion
{
public class Factura
{
}
}
}

La clase Salarioserá, por lo tanto, accesible con el nombre Gestion.Paga. Salario.

3. Los atributos
Los atributos son marcas que puede colocar en su código con el fin de añadir datos adicionales a los
elementos de su aplicación.

Se guardan en los metadatos del ensamblado durante la compilación del proyecto. El runtime utiliza
los metadatos para gestionar la depuración, el seguimiento de las versiones, la compilación y otros
datos relativos a la utilización de su código. Los atributos pueden aplicarse a un ensamblado, un
módulo o una porción de código más pequeña, como un procedimiento o una función. A veces
podrán aceptar argumentos para modificar su significado.

Los atributos están ubicados en el código entre los símbolos [ y ]. Si se utilizan varios atributos,
deben ir separados con comas. Los posibles parámetros de un atributo estarán ubicados entre
paréntesis.

El alcance de un atributo puede extenderse también con las palabras reservadas Assembly: o
Module: ubicadas antes del atributo. La sintaxis de utilización de un atributo es, por lo tanto:

[alcance:Atributo1(parámetro1,...),Atributo2,...]

a. Atributos más habituales en Visual C#

Entre los atributos disponibles, algunos se usan muy a menudo en el desarrollo con Visual C#.
Vamos a estudiar su utilización e ilustrarlo con un ejemplo.

Serializable, NonSerialized

Estos dos atributos controlan la serialización de una clase y de sus miembros. La serialización
permite el registro de una instancia de clase en un archivo, con lo que asegura la persistencia de
los datos. El archivo generado puede estar en formato binario o XML. En este caso, facilita el
intercambio de datos entre aplicaciones. Para que una clase sea utilizable por el mecanismo de
serialización, ésta debe ser marcada con el atributo SerializableAttribute. Durante la
operación de serialización, el contenido de cada uno de los miembros de la instancia de la clase se
guarda en el archivo. Si algunos de ellos no deben guardarse en el archivo, se deben marcar con el
atributo NonSerializedAttribute.

http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 5/8
24/4/2014 ENI Training - Libro online

El ejemplo siguiente define la clase Persona con dos miembros (Apellido y Nombre) que se
serializarán y un miembro (Edad) que no se serializará. Una instancia de la clase se crea y se
guarda en un archivo con formato XML.

Ejemplo

using System;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.IO;
namespace Contab
{
[Serializable()] public class Persona
{
public String apellido;
public string nombre;
[NonSerialized()] public int edad;
public Persona()
{
}
}
static class Serializacion
{
public static void main()
{
Persona unaPersona;
unaPersona = new Persona();
unaPersona.apellido = "García";
unaPersona.nombre = "Pablo";
unaPersona.edad = 25;
Stream flujo;
flujo = File.Open("c:\\datos.xml", FileMode.Create);
SoapFormatter formador;
formador = new SoapFormatter();
formador.Serialize(flujo, unaPersona);
flujo.Close();
}
}
}

La ejecución de este código genera el siguiente archivo XML:

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC=
"http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV=
"http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.
microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<a1:Persona id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/
Contab/testFunciones%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20Public-
KeyToken%3Dnull">
<apellido id="ref-3">García</apellido>
<nombre id="ref-4">Pablo</nombre>
</a1:Persona>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 6/8
24/4/2014 ENI Training - Libro online

Nuestra instancia de la clase Persona se encuentra guardada en este archivo con sus dos
miembros Apellido y Nombre y, como hemos indicado en la definición de la clase, el
miembro Edadno se ha guardado.

DllImport

Se utiliza este atributo para indicar que una función es importada desde una librería de código no
gestionado. Permite en particular la utilización de funciones definidas en una librería del sistema.
En el siguiente ejemplo, la función MoveFilese puede utilizar como una función clásica.

Ejemplo

[DllImport("KERNEL32.DLL")] public static extern bool


MoveFile(string src,string dst);

Obsolete

Se puede utilizar este atributo para indicar que un elemento, clase o método o propiedad no se
debe utilizar más. Si a pesar de todo se utiliza este elemento en una aplicación, el compilador
genera una advertencia o un error en función de la configuración del atributo. Es posible pasar a
este atributo una cadena de caracteres como parámetro para representar el mensaje visualizado
por el compilador. Un segundo parámetro de tipo booleano permite especificar si la utilización del
elemento, marcado con este atributo, genera una advertencia o un error de compilación.

[Obsolete ("No se debe utilizar más este método",false)]


public static void copia()
{
Persona unaPersona;
unaPersona = new Persona();
unaPersona.apellido = "García";
unaPersona.elNombre = "Pablo";
unaPersona.edad = 25;
Stream flujo;
flujo = File.Open("c:\\datos.xml", FileMode.Create);
SoapFormatter formateador;
formateador = new SoapFormatter();
formateador.Serialize(flujo, unaPersona);
flujo.Close();
Persona.MoveFile("c:\\datos.xml", "c:\\data.xml");
}

La utilización de este método en una aplicación provoca la siguiente advertencia durante la


compilación.

Si este atributo viene definido con un segundo parámetro igual a true, el compilador activa un
error cuando se utiliza el elemento.

http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 7/8
24/4/2014 ENI Training - Libro online

[Obsolete("no se debe utilizar más esta propiedad", true)]


public String nombre
{
get
{
return elnombre;
}
set
{
elnombre= value;
}
}

Subir

C ondicione s ge ne rale s de uso C opyright - ©Editions ENI

http://www.eni-training.com/client_net/mediabook.aspx?idR=69383 8/8

Вам также может понравиться