मैं Outlook 2013 के लिए एक VSTO एडिन में .NET 4.5 का उपयोग कर रहा हूं। मुझे कुछ परेशानी पूरी तरह से गुणों और एक्सेसर्स को समझने में समस्या है। स्वतः लागू किए गए एक्सेसर्स जिन्हें मैं मानता हूं वे तब होते हैं जब आप लिखते हैं; सेट; {// कोड}, आदि प्राप्त करने के बजाय मुझे परेशानी भी दे रही है। मेरे पास एक कक्षा है जो मैं अपनी कक्षा में आंतरिक रूप से उपयोग करता हूं।गुण और ऑटो-कार्यान्वयन
private Dictionary<string, string> clientDict { get; set; }
private Dictionary<string, string> clientHistoryDict { get; set; }
तो बाद में:
clientDict = new Dictionary<string, string>();
clientHistoryDict = new Dictionary<string, string>();
मैं बाद में कोड में गुण के रूप में ही नाम का उपयोग कर रहा हूँ, एक ही कक्षा के भीतर यहाँ मेरी कोड है।
मैं वास्तव में लिखना कभी नहीं:
private Dictionary<string, string> _clientDict; // etc.
चर मैं सिर्फ संपत्ति सीधे उपयोग कर रहा था बनाने के लिए।
मैंने ऐसा करने के लिए अपना कोड बदलने की कोशिश की, और मुझे कुछ समस्याएं थीं और एहसास हुआ कि गुणों की मेरी समझ थोड़ा मिश्रित है।
यहां कुछ प्रश्न हैं जिन्हें मुझे स्पष्ट करने की आवश्यकता है कि मुझे सही उत्तर नहीं मिल रहा है।
पहला, क्या निजी संपत्ति का उपयोग करने का कोई कारण है? मेरे शब्दकोशों को कक्षा के बाहर या किसी भी व्युत्पन्न कक्षाओं में कभी भी एक्सेस नहीं किया जाता है, इसलिए गुणों का उपयोग करने का कोई कारण भी है? मैं किसी भी विशेष सत्यापन या सेटटर या कुछ भी इस तरह का उपयोग नहीं करता हूं।
दूसरा, जब मैंने चर कोड का उपयोग करने के लिए अपना कोड बदलने की कोशिश की और फिर अपने विशिष्ट संपत्ति उदाहरण जैसे गुणों के माध्यम से उन्हें एक्सेस किया, तो मैं समस्याओं में भाग गया। मुझे एक उदाहरण मिला जहां गेटर return _clientDict
पर सेट किया गया था, लेकिन सेटटर केवल था, यह मुझे त्रुटि देता था: मुझे एक शरीर सेट करना होगा क्योंकि यह सार या आंशिक नहीं है। इस उदाहरण में मेरे लिए सेटटर को स्वचालित रूप से क्यों लागू नहीं किया जाएगा?
आखिरकार, जब मैं उसी वर्ग में संपत्तियों पर नया कॉल करता हूं, जिसमें इसे घोषित किया जाता है, तो संपत्ति के साथ ऐसा करने और उसी प्रकार के सामान्य चर के बीच क्या अंतर होता है? क्या संपत्ति उस मामले में चर से भिन्न होती है? क्या यह गुणों का उपयोग करने के लिए खराब तरीका है जब इसे निजी चर के साथ पूरा किया जाना चाहिए?
ये कुछ गुमराह प्रश्न हो सकते हैं लेकिन मुझे कोई अन्य स्थान नहीं मिल रहा है जिसमें जानकारी मुझे इन भेदों को समझने में मदद करने के लिए है। मैं इस सब को खोजने और समझने के लिए गुणों के साथ खेल रहा हूं लेकिन मैं सहायता कर सकता हूं ताकि मैं सहायता कर सकूं।
भारी मदद बहुत बहुत धन्यवाद, बस कुछ स्पष्टीकरण? फ़ील्ड द्वारा आपका मतलब क्या है कि एक्सेस विनिर्देश नहीं हो सकते हैं? क्या कोई निजी सदस्य चर इसका उदाहरण नहीं होगा? मुझे लगता है कि मुझे क्षेत्र में क्या मतलब है याद आ रही है। – shenk
निजी संपत्तियों के लिए तर्क भविष्य में बदलाव के लिए संभावित है। यद्यपि आपके पास अब कोई प्रमाणीकरण तर्क नहीं है, फिर भी भविष्य में, और पहले से ही एक संपत्ति होने से आपको इस तर्क को बदलने के लिए एक ही स्थान मिल जाता है, बल्कि आपकी कक्षा में प्रत्येक स्थान असाइनमेंट होने के बजाय, आपके वर्ग के इनवेरिएंट को बनाए रखना आसान होता है। यह एक * महान * तर्क नहीं हो सकता है, खासतौर से सभी मामलों में, लेकिन यह * कुछ प्रकार की अस्थिरता को समाहित करने में मदद कर सकता है। –
@ शेन्क एक संपत्ति यह कर सकती है: 'सार्वजनिक स्ट्रिंग Foo {get; संरक्षित सेट; } ', जिसका अर्थ है कि व्युत्पन्न प्रकार केवल' Foo' के मान को सेट कर सकते हैं। एक क्षेत्र ऐसा नहीं कर सकता है। –