मैं डेल्फी 2010 में जेनरिक का उपयोग शुरू कर दिया है, लेकिन मैं एक समस्या है जब कोड के इस टुकड़े संकलन है:TGeneric <Base> और TGeneric <Descendant> असंगत प्रकार क्यों हैं?
procedure MakeAllThreadsActive(aThreads: TThreadBaseList<TThreadBase>);
begin
...
end;
और अंत में मैं कॉल करना चाहते हैं:
TThreadBase = class(TThread)
...
end;
TThreadBaseList<T: TThreadBase> = class(TObjectList<T>)
...
end;
TDataProviderThread = class(TThreadBase)
...
end;
TDataCore = class(TInterfacedObject, IDataCore)
private
FProviders: TThreadBaseList<TDataProviderThread>;
...
end;
तो मैं कुछ नेस्टेड प्रक्रिया है TDataCore वर्ग के कोड में इस नेस्टेड प्रक्रिया:
MakeAllThreadsActive(FProviders);
लेकिन संकलक यह संकलित करने के लिए नहीं चाहता है और यह कहते हैं ('<> 'कोष्ठक की जगह'() '):
[डीसीसी त्रुटि] LSCore.pas (494): E2010 असंगत प्रकार: ' TThreadBaseList (TThreadBase) 'और ' TThreadBaseList (TDataProviderThread) '
मुझे यह समझ में नहीं आता है हालांकि TDataProviderThread TThreadBase के वंशज है।
MakeAllThreadsActive(TThreadBaseList<TThreadBase>(FProviders));
किसी को भी पता है क्यों संकलक इस त्रुटि का कहना है:
मैं कठिन typecasting करके इसे ठीक करने के लिए किया था?
जैसा कि अन्य लोगों ने पहले से ही समझाया है कि आपको यह त्रुटि क्यों मिलती है, MakeAllThreadsActive को TThreadBaseList को कार्य करने के लिए एक विधि बनाने का प्रयास करें। –