निम्नलिखित पर विचार करें:जेनेरिक्स विधि प्रकार के समाधान नहीं सही ढंग से
{$APPTYPE CONSOLE}
uses
Generics.Collections;
type
TObjProc = procedure of object;
TFoo = class
public procedure DoFoo;
public procedure DoBar;
end;
procedure TFoo.DoFoo;
begin
WriteLn('foo');
end;
procedure TFoo.DoBar;
begin
WriteLn('bar');
end;
var
ProcList : TList<TObjProc>;
Foo : TFoo;
aProc : TObjProc;
begin
Foo := TFoo.Create;
ProcList := TList<TObjProc>.Create;
ProcList.Add(Foo.DoFoo);
ProcList.Add(Foo.DoBar);
for aProc in ProcList do aProc;
ReadLn;
end.
यह
foo
bar
की उम्मीद उत्पादन का उत्पादन अब मान लीजिए कि हम सूची में से एक प्रक्रिया प्रदान करना चाहते हैं। उपरोक्त के रूप में काम की गणना। यह भी काम करता है:
aProc := ProcList.Items[0];
aProc;
लेकिन यह एक संकलक त्रुटि फेंकता है:
aProc := ProcList.First;
// E2010 Incompatible types:
//'procedure, untyped pointer or untyped parameter' and 'TObjProc'
कौन सा के बाद से
function TList<T>.First: T;
begin
Result := Items[0];
end;
तो दोगुना अजीब है ... क्या हो रहा है?
इस रूप में अच्छी तरह डेल्फी के नए संस्करण प्रभावित करता है? मैं क्यूसी से यह लुभाना चाहता हूं कि अगर उचित उम्मीद है कि यह काम करना चाहिए (जो मुझे लगता है)।
सी #, सी, सी ++, पायथन और हर दूसरी भाषा से। वीबी के अलावा। जब आप खुद को आकार दो के सेट में पाते हैं तो यह हमेशा खराब होता है और दूसरा सदस्य वीबी है !! –
और, AFAIK, स्विफ्ट, तो फिर यह तीन का सेट बन जाता है। –