2010-02-19 2 views
2

я могу словесное название совершенно неправильно, но в принципе, у меня есть следующий базовый класс:Получить реализованный тип из Generic базового класса

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

Реализация этого что-то вроде:

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

в принципе, то, что мне нужно, это в моем базовом классе ScheduleableService, чтобы иметь возможность разжиться MyScheduledService тип- есть ли способ, что я могу сделать это без прохождения его.

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

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 
} 
+0

Вы говорите, что хотите получить доступ к * членам * 'MyScheduledService' из' ScheduleableService '? – fre0n

ответ

11

this.GetType() или я что-то не хватает?

+1

LOL, его так легко, что это слишком очевидно. – Will

+1

Я гнева себя иногда. лол – Alex

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

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

Смежные вопросы