У меня есть WrapperBase<PocoBase>
класса, который обертывает объекты POCO и обеспечивает дополнительные функциональные возможности:Как я могу указать BaseType <any>?
public class WrapperBase<T>
where T : PocoBase
и несколько реализаций на вершине этого базового класса.
public class ButtonWrapper : WrapperBase<Button>
public class ZipperWrapper : WrapperBase<Zipper>
Я пытаюсь написать класс, который принимает WrapperBase<T>
в качестве параметра конструктора.
public class ThingDoer
where T : PocoBase
{
public ThingDoer(WrapperBase<T> wrapper)
{
}
}
, но независимо от того, что я стараюсь, то ThingDoer
хочет определение T
:
new ThingDoer<Zipper>(zipperWrapper);
// I don't care what T is... get rid of <Zipper>
Как я могу сказать: «Я не волнует, что T
это, потому что все функциональные возможности, я хочу, в WrapperBase
"?
При работе с дженериками вы должны представить, что '<' and '>' - это просто часть имени. Представьте себе, что у вас были два класса, которые были определены как «открытый класс ButtonWrapper: WrapperBase_Button» и «public class ZipperWrapper: WrapperBase_Zipper», подумайте о своем вопросе снова, вы не можете просто «WrapperBase», потому что у вас нет класса с именем 'WrapperBase', у вас есть два класса с именем' WrapperBase_Button' и 'WrapperBase_Zipper', которые не имеют ничего общего друг с другом, кроме того, что они имеют одни и те же первые 12 букв в их имени. –