ComponentModel.IContainer components

27/12/2007 - 12:48 por Josias | Informe spam
Veo que cada form creado me crea este codigo en el form.designer.cs:

private System.ComponentModel.IContainer components = null;

Cual es el uso de eso?

Preguntas similare

Leer las respuestas

#6 Pedro Luna Montalvo
27/12/2007 - 16:39 | Informe spam
Saludos amigos,

Es para uso interno del diseñador visual, ni lo mires siquiera si no
quieres no poder ver la ficha en forma de diseño nunca más.




Yo le pondría una objeción a este comentario. Lo etiquetaria más o menos
igual que cuando para ejecutar al?guna reparación o activar/desactivar
alguna característica, la sugerencia es modificar algo en el Register del
sistema: SI DE VERDAD TIENES QUE HACERLO, BUENO, PERO CON CUIDADO.

Claro, acá lo crítico sería si te pones a "jugar" con código de aplicativos
a producción, y de los cuales no haya forma rápida, segura e "indolora" de
recuperar la versión anterior antes de los cambios realizados.

En resumen, si quieres averiguar para que sirve cada uno de los elementos de
ese código autogenerado, ADELANTE! Pero no lo hagas con código de trabajo o
producción!


private System.ComponentModel.IContainer components = null;
Cual es el uso de eso?



Este campo es inicializado en el método InitializeComponent(), más adelante,
solamente si el formulario contiene algún Componente (objeto que hereda de
la clase Component), y que tiene algún constructor público que recibe como
parámetro una instancia de un objeto del tipo
System.ComponentModel.IContainer.

Si quieres hacer la prueba, crea un nuevo formulario, agrega algunos
componentes al formulario, como SerialPort y Timer. En el método
InitializeComponent() observarás que en el constructor de esos componentes
se envía la instancia de components, por ejemplo:

this.serialPort1 = new System.IO.Ports.SerialPort(this.components);

Si quieres hacer las pruebas con tus propios componentes, crea dos clases,
las heredas de la clase Component, y a una le agregas un constructor que
reciba como parámetro un elemento del tipo System.ComponentModel.IContainer.
Al agregarlas al formulario, verás que el diseñador automáticamente
seleccionará ese constructor. Por cierto, el constructor debería ser así:

public Component1(System.ComponentModel.IContainer container)
{
container.Add(this);
}


Bueno, ese es el "modus-operandi", pero para que sirve y porque no todos los
componentes lo implementan?? El objetivo principal es asegurarse que el
Recolector de Basura, disponga apropiadamente de los recursos de esos
componentes (que son críticos), al momento de liberar (Dispose) el
formulario.

Para confirmarlo observa la sobrecarga del método Dispose del formulario:

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}


Este campo components, sirve como un contenedor, una colección donde todos
los componentes de recursos "críticos" y que forman parte del formulario son
agregados, de forma que cuando el formulario es liberado (Dispose), nos
aseguramos que junto con él se liberarán los recursos de estos componentes
(se invocará el método Dispose de cada uno de estos componentes). El resto
de componentes que no implementa este constructor que te indicaba arriba,
nos indica que sus recursos no son "críticos" y pueden esperar un poco a que
el colector de basura los requiera.

Saludos,
Pedro Luna
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida