Ho un metodo come il seguente:C# Passo Generics a tempo di esecuzione
public IEnumerable<T> GetControls<T>()
: where T : ControlBase
{
// removed.
}
Poi ho creato una classe:
public class HandleBase<TOwner> : ControlBase
: TOwner
{
// Removed
}
Mi piacerebbe essere in grado di chiamare
GetControls<HandleBase<this.GetType()>>;
dove dovrebbe utilizzare il tipo di questa classe per passare a HandleBase. Questo in sostanza otterrebbe tutti i HandleBase che hanno un proprietario di questo tipo.
Come posso ottenere questo risultato?
EDIT:
sto usando .NET 2.0 in modo da soluzioni superiori a 2.0 non funzioneranno.
L'idea è che ControlBase abbia una raccolta di altri ControlBase per "bambini". Quindi possono essere interrogati in base al loro tipo con GetControls<T>()
. Questo mi permetterebbe, ad esempio, di ottenere tutto il HandleBase per una forma. Quindi posso prendere tutti questi e impostare Visible = false o fare qualcos'altro con loro. Così posso manipolare i bambini di un tipo specifico per una collezione.
HandleBase<TOwner>
richiede il TOwner poiché ha un riferimento al "tipo proprietario". Quindi puoi solo aggiungere qualcosa che estende HandleBase a una forma. Ha senso?
Grazie per tutto l'aiuto!
@TheCloudlessSky, perché invocare 'this.GetType()'? se stai invocando 'GetControls>();' da una classe basata sull'istanza [come 'this this' indica], perché non utilizzare semplicemente il nome tipo dichiarato della classe di implementazione? se questa è una classe base, ci sono mezzi per esporre il tipo della sottoclasse alla classe base. –
Vedi modifica sopra. – TheCloudlessSky