मुझे पता है कि शीर्षक बहुत व्यापक है - बहुत अधिक फैल रहा है!जेनिक्स, पॉलिमॉर्फिज्म, इंटरफेस: समाधान क्या है?
और मुझे आशा है कि यह प्रश्न विषयों पर एक बड़ी "जानकारी विकी चीज़" के लिए विकसित हो सकता है।
मैं क्या सीखा है - अब तक:
- जेनेरिक्स का उपयोग करते समय - अवधारणाओं को समझने (covariance and contravariance)।
- Do NOT "mis-use" विरासत के साथ संयुक्त जेनरिक की अवधारणा। मैंने किया और यह आपको सीधे covariance समस्याओं में सिर बना सकता है! सुनिश्चित करें कि आप जेनेरिक को अपने विरासत में सही बिंदु पर "तोड़ दें" - यदि आप दोनों को जोड़ रहे हैं।
(कृपया मुझे सही करें - अगर आपको लगता है कि मैं गलत हूं, गायब हूं या कुछ गलत समझा है)।
मेरे समस्या थी:
लेकिन अब से मैं अनगिनत घंटे खर्च करते हैं, यह पता लगाने की, इस "बड़ी पहेली" मैं मेरी मेज पर है हल करने के लिए कैसे की कोशिश कर रहा है। और मुझे आप में से कई उपयोगकर्ताओं के कुछ अच्छे जवाब मिल चुके हैं - लेकिन अब इसका समय बड़े पैमाने पर काम करने के लिए है।
मैं इस एक के साथ जेनेरिक्स में कदम: Generics and Polymorphism working together
और अब मैं थोड़े पर अटक कर रहा हूँ यह एक: Situations where Generics won't work
मैं क्यों सहप्रसरण समस्याओं के साथ खत्म - में मेरी कक्षा प्रक्रिया की वजह से है मेरा पदानुक्रम
तो मुझे आश्चर्य है कि इंटरफेस इस "गाथा" में मेरा अगला साहसिक कदम है या नहीं। एक कॉन्वर्सिस समस्या "एक कदम" कैसे करें। एक बात यह जानना है कि आपको वास्तव में यह समस्या है - एक और बात यह है कि "इसके आसपास कैसे काम करना है"।
तो यदि आप में से कोई भी अच्छा लोग "वहां से बाहर" इस पर कोई राय है - मैं सभी कान हूं। असल में: मुझे इंटरफ़ेस के लिए जाने के लिए कहें (मैंने कभी खुद को खरोंच से नहीं किया है)। या .. मुझे उस दिशा में एक हड्डी फेंक दें जो आप सुझाएंगे।
मेरा वर्तमान स्रोत पूल शीर्ष लिंक से दूसरे लिंक में बताया गया है।
यहां मेरे पिछले post से एक छोटा स्निपेट है जो मेरी कॉन्वर्सिस समस्या दिखाता है। David कृपया समझाया - मैं झाड़ी में क्यों भाग गया .. लेकिन अब मुझे जानकारी चाहिए - इसके चारों ओर कैसे दौड़ें।
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;
सादर
अगर हम वास्तव में जानते हैं कि आपकी वास्तविक समस्या क्या है तो इससे मदद मिलेगी। मेरे अनुभव में, कॉन्वर्सिस शायद ही कभी एक समस्या है, अगर डिजाइन बहुत जटिल नहीं है। IOW, हमें असली समस्या बताएं, इसलिए हमारे पास हल करने के लिए कुछ ठोस है। –
@RudyVelthuis अच्छी तरह से ... जैसा कि आप उल्लेख करते हैं - यह बहुत जटिल है और पूर्व [पोस्ट] (http://stackoverflow.com/q/9140485/696574) से बहुत सी पुनर्लेखन की आवश्यकता होगी। लेकिन मूल रूप से यह वही समस्या है - केवल सवाल बदल गया है। चूंकि अब मैं जानता हूं कि मैंने क्या गलत किया है - मुझे उम्मीद है कि कोई मुझे समाधान की दिशा में इंगित कर सकता है। यदि यह अभी भी अस्पष्ट है - मुझे बताएं और मैं जितना अच्छा कर सकता हूं उतना अच्छा प्रयास करूँगा। –
समस्या के आसपास काम करने के लिए कैसे समस्या * है * पर निर्भर करता है। एक बार जब आप 'एलीस्ट' को मान देते हैं, तो आप उस चर के साथ * क्या करने की अपेक्षा करते थे? (इसके अलावा, टीपीर्सलिस्ट और टीसी कस्टमर लिस्ट जेनेरिक क्यों हैं? * * * क्या आपके पास टीपीर्सनलिस्ट है?) –