2015-10-29 5 views
5

सी # में हमारे पास protected एक्सेसर है जो वर्ग के सदस्यों को विरासत वाले समूहों पर दिखाई देने की अनुमति देता है लेकिन बाकी के लिए नहीं।तेजी से सी # संरक्षित एक्सेसर सोचने का सही तरीका क्या है?

स्विफ्ट में यह मौजूद नहीं है तो मुझे आश्चर्य है कि क्या इस तरह के लिए एक सही दृष्टिकोण है:

मैं एक चर (आंतरिक व्यवहार) और और एक सार्वजनिक विधि एक आधार पर इस चर का उपयोग कर करना चाहते हैं कक्षा। इस चर का उपयोग विरासत वाले समूहों पर भी किया जाएगा।

विकल्प मैं देख रहा हूँ

  • आधार वर्ग के बारे में भूल जाओ और हर जगह मैं इसकी आवश्यकता को लागू चर और तरीकों। WRONG, डुप्लिकेट कोड
  • संरचना द्वारा विरासत को लागू करें। मैं सामान्य विधियों वाली कक्षा बनाउंगा और इसका उपयोग विरासत की बजाय संरचना द्वारा किया जाएगा। कम WRONG लेकिन अभी भी कोड दोहराया जा सकता है जिसे विरासत
  • से वंचित किया जा सकता है विरासत लागू करें और आधार वर्ग पर परिवर्तनीय आंतरिक बनाएं। WRONG विरासत वाले समूहों पर दृश्यता को छोड़कर किसी भी औचित्य के बिना चीजों को उजागर करता है।

बेस कक्षा

के लिए कार्यान्वयन विवरण मैं एक NSOperationQueue उदाहरण और और पंक्तिबद्ध कार्यवाही रद्द करना एक सार्वजनिक विधि करना चाहते हैं। मैं विरासत कक्षाओं से इस कतार में नए परिचालन जोड़ता हूं।

उत्तर

3

स्विफ्ट में सही उत्तर लगभग हमेशा प्रोटोकॉल और एक्सटेंशन होता है। यह लगभग विरासत कभी नहीं है। कभी-कभी कोको हमारे रास्ते में खड़ा होता है, क्योंकि प्रोटोकॉल की तुलना में कोको में अक्सर कक्षाएं होती हैं, लेकिन लक्ष्य लगभग हमेशा प्रोटोकॉल और एक्सटेंशन होता है। सबक्लासिंग हमारी आखिरी पसंद है।

आपका विशेष मामला भ्रमित है क्योंकि NSOperationQueue में पहले से ही कतारबद्ध संचालन रद्द करने के लिए एक सार्वजनिक विधि है (cancelAllOperations)। यदि आप बाहर की पहुंच से कतार की रक्षा करना चाहते हैं (कॉलर्स को उदाहरण के लिए सीधे addOperation का उपयोग करने से रोकें), तो आपको कतार को किसी अन्य प्रकार (यानी रचना) के अंदर रखना चाहिए, और आगे बढ़ना चाहते हैं कि आप कतार में क्या चाहते हैं। आप जिस विशिष्ट समस्या को हल कर रहे हैं उस पर अधिक जानकारी हमें अन्य स्विफ्ट-जैसे समाधानों का सुझाव देने में मदद करेगी।

यदि अंत में आपको protected या friend जैसा लगता है, तो सही समाधान private है। अपने सबक्लास या अपने दोस्त को उसी फ़ाइल में लक्ष्य के साथ रखें, और निजी चीज़ private चिह्नित करें। वैकल्पिक रूप से, उन चीजों को रखें जिन्हें ढांचे में एक साथ काम करने की आवश्यकता है, और internal विशेषता को चिह्नित करें। Swift Blog यह एक अच्छा स्पष्टीकरण प्रदान करता है कि यह एक जानबूझकर विकल्प क्यों है।

+0

शानदार उत्तर। धन्यवाद! – StackOverflower

संबंधित मुद्दे