Получите реализованный тип из универсального базового класса.

StackOverflow https://stackoverflow.com/questions/2296850

Вопрос

Возможно, я совершенно неправильно сформулировал заголовок, но по сути у меня есть следующий базовый класс:

public class ScheduleableService<T> : ServiceBase
        where T : IJob
{
        var x = typeof(T);
}

Реализация этого примерно такая:

public class MyScheduledService: ScheduleableService<MyScheduledJob>
{
    //MyScheduledJob implements IJob
}

По сути, мне нужно, чтобы в моем базовом классе Schedulabuebuebuebuebrice, чтобы иметь возможность завладеть типом MySchedService- есть ли я какой-нибудь способ сделать это, не пропуская его.

Следующие работы, однако, уродливы.....

public class ScheduleableService<T, S> : ServiceBase
    where T : IJob
    where S : ServiceBase
{

    var x = typeof(T);
    var y = typeof(S);
}

выполнение:

public class MyScheduledService: ScheduleableService<MyScheduledJob,
                                                     MyScheduledService>
{
    //MyScheduledJob implements IJob
}
Это было полезно?

Решение

this.GetType() или я что-то упускаю?

Другие советы

MyScheduledService svc = this as MyScheduledService;
if (svc != null)
{
    // it is a MyScheduledService, and you can work with svc
}

Но зачем вам это нужно делать?Возможно, это указывает на недостатки вашего дизайна.Базовому классу никогда не нужно ничего знать о производных типах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top