असल में, मैं चाहता हूं कि एक वर्ग एक ही सामान्य इंटरफेस के दो अलग-अलग संस्करणों को लागू करने में सक्षम हो।जेनिक्स मेस अप इंटरफेस नाम मैपिंग करें?
इस कोड
type
// a generic interface
ITest<T> = interface
['{6901FE04-8FCC-4181-9E92-85B73264B5DA}']
function Val: T;
end;
// a class that purports to implement two different types of that interface
TTest<T1, T2> = class(TInterfacedObject, ITest<T1>, ITest<T2>)
protected
fV1: T1;
fV2: T2;
public
constructor Create(aV1: T1; aV2: T2);
function Val: T1; // Val() for ITest<T1>
function T2Val: T2; // Val() for ITest<T2>
function ITest<T2>.Val = T2Val; // mapping
end;
constructor TTest<T1, T2>.Create(aV1: T1; aV2: T2);
begin
inherited Create;
fV1 := aV1;
fV2 := aV2;
end;
function TTest<T1, T2>.T2Val: T2;
begin
result := fV2;
end;
function TTest<T1, T2>.Val: T1;
begin
result := fV1;
end;
/////////////
procedure Test;
var
t : TTest<integer, string>;
begin
t := TTest<integer, string>.Create(39, 'Blah');
ShowMessage((t as ITest<string>).Val); // this works as expected
ShowMessage(IntToStr((t as ITest<integer>).Val)); // this gets AV
end;
पहले ShowMessage प्रदर्शित करता है 'ब्ला' के रूप में मैं उम्मीद होती है, लेकिन दूसरी दुर्घटनाओं पर विचार करें। इसका कारण यह है कि कॉल वैल() के बजाय T2Val() को आमंत्रित करता है जैसा कि मैंने अपेक्षा की थी। स्पष्ट रूप से संघर्ष समाधान मैपिंग दोनों प्रकार के इंटरफेस के लिए विधि को मानचित्र करता है न केवल आईटीएस्ट के लिए: टी 2।
तो, यहां मेरा प्रश्न है।
क्या यह एक बग है? जिसका मतलब है, क्या एम्बरकाडेरो ने इसका समर्थन करने का इरादा किया और इसे गलत तरीके से कार्यान्वित किया? या क्या प्रोग्रामर को ऐसा कुछ करने की इजाजत देने का कोई इरादा नहीं था? (ईमानदारी से, मैं थोड़ा आश्चर्यचकित था कि मेरा परीक्षण कार्यक्रम भी संकलित)
यदि यह एक बग है, तो क्या किसी के पास कोई विचार है कि क्या मुझे एक वर्ग का समर्थन करने के लिए एक वर्ग का दो अलग-अलग प्रकार के एक सामान्य प्रकार का समर्थन करने के लिए कोई कामकाज हो सकता है इंटरफेस?
हू। जानकार अच्छा लगा। धन्यवाद। आप जानकारी बैरी की सिर्फ एक सोने की खान हैं। समय देने के लिए धन्यवाद। – TrespassersW
डी 2010 पहले से ही इस हैश, बैरी है? –
दुर्भाग्यवश यह नहीं है। हालांकि मुझे वास्तव में इसमें देखना चाहिए। –