design patterns - VB.Net clone hierarchy where parent has reference to child and vice versa -> circular reference -


यह स्थिति है:

  कक्षा ए उपकरण बच्चे) सार्वजनिक समारोह क्लोन () वस्तु के रूप में Iloneable.Clone रिटर्न के साथ एक नई ए के साथ। {बच्चों। = बच्चे। चुनें (समारोह (सी) DirectCast (c.Clone (), बाल)) ToList ()} समाप्ति समारोह कक्षाएं कक्षा बच्चे के कार्यान्वयन के रूप में आईसीएलओनेबल पब्लिक प्रॉपर्टी जनरेट एक जन समारोह क्लोन () के रूप में ऑब्जेक्ट इलैप्लिकेशंस आईसीएलओनेबल। क्लोन रिटर्न न्यू चाइल्ड विथ {। मुख पृष्ठ = डायरेक्ट सीस्ट (पेरेंट.क्लोन (ए)} एंड फंक्शन एंड क्लास  

वास्तविक वस्तु अधिक जटिल है, जिसमें कई स्तर हैं। मुझे यकीन नहीं है कि यह कैसे हल करना है, क्योंकि जब भी आप क्लोन को माता-पिता <कोड> ए वर्ग पर कॉल करते हैं, तो आप एक परिपत्र संदर्भ से समाप्त हो जाएंगे।

मैं इस स्थिति से कैसे बच सकता हूं? क्या मुझे अपना खुद का क्लोन फ़ंक्शन बनाकर एक पैरामीटर के साथ पास करना चाहिए?

सबसे सरल उपाय यह है कि बाल वर्ग माता-पिता सम्पत्ति को बिल्कुल क्लोन न करें। जब एक बाल क्लोन ही होता है, तो यह या तो माता-पिता संपत्ति को छोड़ सकता है, या बस इसे रिक्त छोड़ सकता है। उदाहरण के लिए:

  क्लास चाइल्ड इप्लीमेन्ट्स आईसीएलओनेबल पब्लिक प्रॉपर्टी जनक ए पब्लिक फंक्शन क्लोन () के रूप में ऑब्जेक्ट इम्पलमेंट्स आईसीएलओनेबल। क्लोन रिटर्न न्यू चाइल्ड () के साथ {। Parent = Me.Parent} एंड फंक्शन एंड क्लास  

तब, जब माता-पिता क्लास स्वयं ही, यह सभी क्लोन किए गए बच्चों की parent संपत्ति को सेट कर सकता है, जैसे :

  क्लास ए इम्प्लीमेन्ट्स आईसीएलओनेबल पब्लिक प्रॉपर्टी चाइल्ड (लिस्ट ऑफ चाइल्ड) पब्लिक फंक्शन क्लोन () के रूप में ऑब्जेक्ट इप्लिमेंट्स के रूप में आईसीएलओनेबल। क्लोन रिटर्न न्यू ए () के साथ {। Calend = me.children.Select (फ़ंक्शन (सी) मंद परिणाम बच्चे = डायरेक्ट सीस्ट (सी। क्लोन (), बाल) परिणाम। माता पिता = मुझे वापसी परिणाम समाप्ति फ़ंक्शन। .ओलिस्ट ()} एंड फंक्शन एंड क्लास  

वैकल्पिक रूप से, जैसा आपने सुझाया था, आप अपना खुद का बना सकते हैं क्लोन विधि जो पैरामीटर के रूप में पैरेंट ऑब्जेक्ट लेती है:

  क्लास चाइल्ड पब्लिक प्रॉपर्टी जनक के रूप में एक जन समारोह क्लोन (ए के रूप में माता-पिता) माता-पिता = माता-पिता} एंड फंक्शन एंड क्लास  

यह ICloneable को लागू नहीं करेगा, लेकिन जब तक आपको इसे अन्य प्रकार के साथ परस्पर विनिमय करने की आवश्यकता नहीं है आईसीलाइनेबल ऑब्जेक्ट्स, तो इससे कोई फर्क नहीं पड़ता इसी प्रकार, आप केवल अपने कन्स्ट्रक्टर को अधिभार कर सकते हैं:

  क्लास चाइल्ड पब्लिक प्रॉपर्टी पेंटर ए पब्लिक सब न्यू के रूप में (एंडेड सब-पब्लिक सब न्यू) (बच्चे के रूप में सेलटोकोन, ए के रूप में अभिभावक) 'अन्य संपत्तियों को कॉपी करें बच्चे को क्लोन करने के लिए मुझे दिया। माता पिता = माता पिता के अंत उप अंत कक्षा  

Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -