Obtenha o tipo implementado de uma classe base genérica
-
21-09-2019 - |
Pergunta
Eu posso redigir o título completamente errado, mas basicamente tenho a seguinte classe base:
public class ScheduleableService<T> : ServiceBase
where T : IJob
{
var x = typeof(T);
}
A implementação disso é algo como:
public class MyScheduledService: ScheduleableService<MyScheduledJob>
{
//MyScheduledJob implements IJob
}
Basicamente, o que eu preciso está na minha classe base Scheduleables Service, para poder se apossar do tipo MyScheduledService- existe da maneira que eu possa fazer isso sem passá-lo.
Os seguintes trabalhos, no entanto, são feios .....
public class ScheduleableService<T, S> : ServiceBase
where T : IJob
where S : ServiceBase
{
var x = typeof(T);
var y = typeof(S);
}
implementação:
public class MyScheduledService: ScheduleableService<MyScheduledJob,
MyScheduledService>
{
//MyScheduledJob implements IJob
}
Solução
this.GetType()
Ou estou perdendo alguma coisa?
Outras dicas
MyScheduledService svc = this as MyScheduledService;
if (svc != null)
{
// it is a MyScheduledService, and you can work with svc
}
Mas por que você precisaria fazer isso? Possivelmente aponta para uma deficiência em seu design. A classe base nunca deve precisar saber nada sobre tipos derivados.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow