que tienen un método como el siguiente:C# Pass genéricos en tiempo de ejecución
public IEnumerable<T> GetControls<T>()
: where T : ControlBase
{
// removed.
}
que luego creó una clase:
public class HandleBase<TOwner> : ControlBase
: TOwner
{
// Removed
}
me gustaría ser capaz de llamar
GetControls<HandleBase<this.GetType()>>;
donde usaría el tipo de ESTA clase para pasar al HandleBase. Esto esencialmente obtendría todos los HandleBase que tienen un propietario de ESTE tipo.
¿Cómo puedo lograrlo?
EDIT:
estoy usando .NET 2.0 por lo que las soluciones superiores a 2.0 no funcionarán.
La idea es que ControlBase tenga una colección de otras ControlBase para "niños". Luego se pueden consultar según su tipo con GetControls<T>()
. Esto me permitiría, por ejemplo, obtener todos los HandleBase para una forma. Entonces puedo tomar todo esto y establecer Visible = falso o hacer algo más con ellos. Por lo tanto, puedo manipular a niños de un tipo específico para una colección.
requiere que TOwner tenga referencia al "tipo propietario". Por lo tanto, solo puede agregar cualquier elemento que extienda HandleBase a Shape. ¿Tener sentido?
¡Gracias por toda la ayuda!
@TheCloudlessSky, ¿por qué invocar 'this.GetType()'? si está invocando 'GetControls>();' desde una clase basada en instancia [como 'this' indica], ¿por qué no simplemente usar el nombre de tipo declarado de la clase implementadora? si esta es una clase base, hay medios para exponer el tipo de la subclase a la clase base. –
Ver la edición anterior. – TheCloudlessSky