Patron singleton

06/03/2009 - 21:29 por Edilberto Arteaga | Informe spam
Hola a todos,

en WindowsForm tengo una clase base (Form) de la que heredo todos mis
formularios para un proyecto, y quiero implementar el patron singleton pero
colocando el codigo en la clase base ya que actualmente lo estoy colocando
en cada formulario heredado y es tedioso estar colocando lineas repetitivas
en cada forma.
este es el codigo que coloco en cada formulario

static <<nobreclas>> instance = null;
static readonly object padlock = new object();
public static <<nobreclas>> Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new <<nobreclas>>();
}
else
{
instance.BringToFront();
instance.WindowState = FormWindowState.Maximized;
}
return instance;
}
}
}

talves esto sea muy facil pero estoy confundido y no he podido implentarlo
en la clase base para que en las clases hijas sea heredado.

Saludos
 

Leer las respuestas

#1 Alberto Poblacion
06/03/2009 - 22:35 | Informe spam
"Edilberto Arteaga" wrote in message
news:
[...] tengo una clase base (Form) de la que heredo todos mis formularios
para un proyecto, y quiero implementar el patron singleton pero colocando
el codigo en la clase base ya que actualmente lo estoy colocando en cada
formulario heredado y es tedioso estar colocando lineas repetitivas en
cada forma.
este es el codigo que coloco en cada formulario
[...]
talves esto sea muy facil pero estoy confundido y no he podido implentarlo
en la clase base para que en las clases hijas sea heredado.



Una forma de resolverlo consiste en usar Generics, suponiendo que estés
trabajando al menos con la versión 2.0 de C#. Cambia tu clase base para que
sea genérica de parámetro T, y mete dentro el mismo código que tienes, pero
poniendo T donde pones <<nobreclase>>:

public class MiClaseBase<T> : Form where T:Form,new()
{
static T instance = null;
static readonly object padlock = new object();
public static T Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new T();
}
else
{
instance.BringToFront();
instance.WindowState = FormWindowState.Maximized;
}
return instance;
}
}
}
//Aquí el resto de lo que tengas en la clase base
}

Y luego haz que tus clases hijas hereden de MiClaseBase< <<nobreform>> > en
lugar de MiClaseBase.

public class MiClaseHija : MiClaseBase<MiClaseHija>
{
...
}

Preguntas similares