Para un objeto, ¿puedo obtener todas sus subclases usando reflexión?Para un objeto, ¿puedo obtener todas sus subclases usando reflexión u otras formas?
Respuesta
Puede cargar todos los tipos en el Ensamblaje y luego enumerarlos para ver cuáles implementan el tipo de su objeto. Dijo 'objeto', por lo que la muestra de código siguiente no es para interfaces. Además, este ejemplo de código sólo se busca en la misma Asamblea que el objeto fue declarado en.
class A
{}
...
typeof(A).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(A)));
O como se sugiere en los comentarios, utilizar este código de ejemplo para buscar a través de todos los ensamblados cargados.
var subclasses =
from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.IsSubclassOf(typeof(A))
select type
Ambos ejemplos de código requieren que usted agregue using System.Linq;
interfaces de
subclases del significado? Sí:
this.GetType().GetInterfaces()
Subclases que significan los tipos de base? Bueno, C# solo puede tener una clase base
Subclases que significa todas las clases que heredan de su clase? Sí:
EDIT: (vcsjones gracias)
foreach(var asm in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in asm.GetTypes())
{
if (type.BaseType == this.GetType())
yield return type;
}
}
Y hacerlo para todos los ensamblados cargados
"Subclases que significan interfaces" - lo siento, pero esto no tiene sentido – BartoszKP
- 1. Comprobación de un apartado de correos en todas sus formas
- 2. C# Uso de la reflexión para obtener propiedades de un objeto genérico (y sus objetos anidados)
- 3. ¿Cómo luchas contra todas estas formas? -Javascript y sus millones de formas diferentes de escribirlo
- 4. especialización de plantilla para todas las subclases
- 5. Clase de reflexión para obtener todas las propiedades de cualquier objeto
- 6. ¿Cómo obtener todas las propiedades estáticas y sus valores de una clase que utilizan la reflexión
- 7. Listar todas las subclases con nombres completos
- 8. ¿Crear nuevo objeto usando la reflexión?
- 9. ¿Es posible obtener todas las subclases de una clase?
- 10. ¿Cómo puedo forzar que un Constructor se defina en todas las subclases de mi clase abstracta?
- 11. cómo obtener todas las subclases de una clase en php
- 12. Dado un objeto javascript arbitrario, ¿cómo puedo encontrar sus métodos?
- 13. ¿Cómo puedo obtener una lista de todas las variables definidas en Matlab u Octave?
- 14. ¿Cómo puedo obtener todas las constantes de un tipo por reflexión?
- 15. Propiedades para la clase y sus subclases solamente
- 16. En Perl/Moose, ¿cómo puedo aplicar un modificador a un método en todas las subclases?
- 17. Uso de la reflexión para obtener todas las clases de cierto tipo base en dll
- 18. array_slice (u otras funciones array_ *) en ArrayObject
- 19. Obtener los parámetros de un atributo usando la Reflexión
- 20. Obtener todas las propiedades con los valores de reflexión
- 21. Usando la reflexión, ¿cómo puedo detectar las propiedades que tienen instaladores?
- 22. Usando la reflexión, llame a un método de un campo en un objeto que ya existe
- 23. Cómo configurar DateTime.Kind para todas las propiedades de DateTime en un objeto usando Reflection
- 24. Cómo usar la reflexión para crear una "máquina de reflexión"
- 25. Obtener todas las funciones de un objeto en JavaScript
- 26. Establezca la propiedad del objeto usando la reflexión
- 27. ¿Cómo puedo console.log funciones junto con todas sus propiedades?
- 28. ¿Usando SwingEventMonitor para monitorear otras aplicaciones?
- 29. Eliminación de un patrón al final de una cadena usando sed u otras herramientas bash
- 30. ¿Cómo hacer un proxy HTTP muy simple usando werkzeug u otras estructuras de python?
Para hacer lo mismo para una interfaz en lugar de un objeto/clase, cambie la línea en la que ' donde typeof (IMyInterface) .IsAssignableFrom (type) && type.IsClass' ([pregunta original] (http://stackoverflow.com/questions/26733/getting-all-types-the-implement-an-interface-with-c -sharp-3-0)). – jtpereyda