Instancias automaticas de todas mis clases derivadas

06/07/2004 - 21:54 por Francisco Gomez | Informe spam
Hola!

¿Alguien podría decirme el código para crear
automáticamente una instancia de cada una de las clases
derivadas de una clase dada?

El caso es el siguiente: Tengo una clase abstracta y
varias clases derivadas singleton. Quisiera crear de
manera automática un ArrayList con todas las instancias
Singleton de estas clases derivadas.

Gracias!

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo
07/07/2004 - 15:37 | Informe spam
Muy poca informacion para poderte ayudar.

Por ejemplo, si usas un patron singleton, como obtienes la instancia de la
clase??
Alguna propiedad o algun metodo?? Acaso este miembro se llama igual en todas
las clases derivadas?? Se asume que todas las derivadas se buscaran en el
ensamblaje actual o pueden estar en otros ensamblajes???

Creo que ayudaria un poco si incluyes algo de codigo, pero por el momento la
respuesta a tu pregunta es: Usa Reflection.

Saludos
Pedro Luna, MVP
Gye, Ecu

"Francisco Gomez" escribió en el
mensaje news:2790101c46393$02639700$
Hola!

¿Alguien podría decirme el código para crear
automáticamente una instancia de cada una de las clases
derivadas de una clase dada?

El caso es el siguiente: Tengo una clase abstracta y
varias clases derivadas singleton. Quisiera crear de
manera automática un ArrayList con todas las instancias
Singleton de estas clases derivadas.

Gracias!
Respuesta Responder a este mensaje
#2 Francisco Gomez
07/07/2004 - 19:41 | Informe spam
Obtengo el Singleton declarando una instancia de la clase
como campo estático público dentro de la propia clase, y
dejando el constructor privado. Todas mis clases derivadas
de Process tienen este aspecto:

class DerivedProcess1 : Process
{
public static DerivedProcess1 instance new DerivedProcess1()

private DerivedProcess1(){...}

}

Hay una ArrayList, en otra clase (class Controller) dentro
del mismo proyecto, que cargo con las instancas Singleton
de cada clase derivada, de la siguiente manera:

ArrayList processes = new ArrayList()

processes.Add(DerivedProcess1.instance);
processes.Add(DericedProcess2.instance);
processes.Add(DerivedProcess3.instance);
.

Hasta ahora he tenido que la carga explicitamente.
¿Podrías indicarme el código para obtener todas las clases
derivadas de Process y añadirlas a mi ArrayList o
SortedList de manera automática?

Gracias!


Muy poca informacion para poderte ayudar.

Por ejemplo, si usas un patron singleton, como obtienes


la instancia de la
clase??
Alguna propiedad o algun metodo?? Acaso este miembro se


llama igual en todas
las clases derivadas?? Se asume que todas las derivadas


se buscaran en el
ensamblaje actual o pueden estar en otros ensamblajes???

Creo que ayudaria un poco si incluyes algo de codigo,


pero por el momento la
respuesta a tu pregunta es: Usa Reflection.

Saludos
Pedro Luna, MVP
Gye, Ecu

"Francisco Gomez"


escribió en el
mensaje news:2790101c46393$02639700$
Hola!

¿Alguien podría decirme el código para crear
automáticamente una instancia de cada una de las clases
derivadas de una clase dada?

El caso es el siguiente: Tengo una clase abstracta y
varias clases derivadas singleton. Quisiera crear de
manera automática un ArrayList con todas las instancias
Singleton de estas clases derivadas.

Gracias!


.

Respuesta Responder a este mensaje
#3 Francisco Gomez
08/07/2004 - 00:58 | Informe spam
Muchiiiisinas gracias!


Saludos:

Mira el siguiente codigo:




using System;
using System.Collections;
using System.Reflection;

public abstract class ParentClass {
}

public class ChildClass1 : ParentClass {
public static ChildClass1 instance = new ChildClass1


();
private ChildClass1() {
}
}

public class ChildClass2 : ParentClass {
public static ChildClass2 instance = new ChildClass2


();
private ChildClass2() {
}
}

public class ChildClass3 : ParentClass {
public static ChildClass3 instance = new ChildClass3


();
private ChildClass3() {
}
}

public class BrowseForChildApp {
private static ArrayList childrenClass = new ArrayList


();

public static void Main() {
// cargar el ArrayList
BrowseForChild();
// mostrar los nombres de los tipos de los


objetos en la lista
foreach(object item in childrenClass) {
Console.WriteLine("Objeto de tipo: {0}",


item.GetType().Name);
}
Console.ReadLine();
}

public static void BrowseForChild() {
// Asumo que solo buscamos en el assembly actual
Assembly assembly = Assembly.GetExecutingAssembly


();

// Navego por los tipos en el assembly, en busca


de algun derivado de ParentClass
foreach(Type type in assembly.GetTypes()) {
if (type.BaseType == typeof(ParentClass)) {
// encontramos uno!!! Asumimos que tiene


una propiedad instance

// obtengo la propiedad estática instance
object instance =
type.InvokeMember("instance",
BindingFlags.Public |


BindingFlags.Static | BindingFlags.GetField,
null, null, null);

// agrego el valor al ArrayList
childrenClass.Add(instance);
}
}
}
}


Saludos
Pedro Luna, MVP
Gye, Ecu



"Francisco Gomez"


escribió en el mensaje news:27d5d01c46449$ac1935a0
$
Obtengo el Singleton declarando una instancia de la clase
como campo estático público dentro de la propia clase, y
dejando el constructor privado. Todas mis clases


derivadas
de Process tienen este aspecto:

class DerivedProcess1 : Process
{
public static DerivedProcess1 instance > new DerivedProcess1()

private DerivedProcess1(){...}

}

Hay una ArrayList, en otra clase (class Controller)


dentro
del mismo proyecto, que cargo con las instancas Singleton
de cada clase derivada, de la siguiente manera:

ArrayList processes = new ArrayList()

processes.Add(DerivedProcess1.instance);
processes.Add(DericedProcess2.instance);
processes.Add(DerivedProcess3.instance);
..

Hasta ahora he tenido que la carga explicitamente.
¿Podrías indicarme el código para obtener todas las


clases
derivadas de Process y añadirlas a mi ArrayList o
SortedList de manera automática?

Gracias!


Muy poca informacion para poderte ayudar.

Por ejemplo, si usas un patron singleton, como obtienes


la instancia de la
clase??
Alguna propiedad o algun metodo?? Acaso este miembro se


llama igual en todas
las clases derivadas?? Se asume que todas las derivadas


se buscaran en el
ensamblaje actual o pueden estar en otros ensamblajes???

Creo que ayudaria un poco si incluyes algo de codigo,


pero por el momento la
respuesta a tu pregunta es: Usa Reflection.

Saludos
Pedro Luna, MVP
Gye, Ecu

"Francisco Gomez"


escribió en el
mensaje news:2790101c46393$02639700$
Hola!

¿Alguien podría decirme el código para crear
automáticamente una instancia de cada una de las clases
derivadas de una clase dada?

El caso es el siguiente: Tengo una clase abstracta y
varias clases derivadas singleton. Quisiera crear de
manera automática un ArrayList con todas las instancias
Singleton de estas clases derivadas.

Gracias!


.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida