Я знаю, что название очень широкое - охватывает много!
И я надеюсь, что этот вопрос может развиться в более крупную "инфо-вики вещь" по предметам.
Что я выучил - до сих пор:
- При использовании Дженерики - понимать концепции ( ковариация и контравариантность ).
- ДелатьНЕ «неправильно использовать» концепцию обобщения в сочетании с наследованием.Я так и сделал, и это может привести вас к проблемам с ковариацией!Убедитесь, что вы «разорвали» родовое звено в правильной точке вашего наследства - если вы объединяете их.
(пожалуйста, исправьте меня - если вы считаете, что я ошибаюсь, отсутствуетили что-то не так понял).
Моя проблема была:
Но сейчас я трачу бесчисленные часы, пытаясь понять, как решить эту проблему«Большая загадка» у меня на столе.И я уже получил несколько хороших ответов от нескольких из вас, пользователей SO, - но теперь пришло время получить что-то, работающее в большем масштабе.
Я рискнул в Generics с этим: Generics and Polymorphism работаетвместе
А теперь я как бы застрял на этом: Ситуации, когда Generics не будет работать
Почему у меня возникают проблемы с ковариацией - потому чтопроцедуры моего класса в моей иерархии.
Так что мне интересно, является ли Интерфейсы моим следующим смелым шагом в этой "саге".Как сделать один «перешагнуть» проблему ковариации.Одна вещь состоит в том, чтобы выяснить, что у вас действительно есть эта проблема - другая вещь - «как обойти ее».
Так что, если у кого-то из вас, хороших людей, «есть», есть какие-то мнения по этому поводу - явсе уши.В основном: Скажите мне, чтобы перейти на интерфейсы (я никогда не делал один с нуля).Или ... бросьте мне кость в том направлении, в котором вы предлагаете.
Мой текущий исходный пул такой же, как указано во второй ссылке - сверху.
Вот небольшой фрагмент моего предыдущего post , который показывает мою проблему ковариации. Дэвид любезно объяснил - Почему я столкнулся с кустом .. Но теперь мне нужна информация о - Как обойти его.
var
aList : TBaseList<TBaseObject>; // used as a list parameter for methods
aPersonList : TPersonList<TPerson>;
aCustomerList : TCustomerList<TCustomer>;
begin
aPersonList := TPersonList<TPerson>.Create;
aCustomerList := TCustomerList<TCustomer>.Create;
aList := aCustomerList; <-- this FAILS !! types not equal ..
end;
С уважением