c# - मैन्युअल कार्यान्वित गुणों पर स्वत: कार्यान्वित गुणों का उपयोग करने का कोई कारण?




properties field (4)

उन चीजों में से एक जो आप नियंत्रण खो देंगे, बैकिंग फ़ील्ड को गैर-सिरीलाइज्ड के रूप में निर्दिष्ट करने की क्षमता है, लेकिन इस मामले में संपत्ति के लिए बैकिंग फ़ील्ड बनाने में काफी आसान है।

भूल गए: यदि आप या आपके द्वारा उपयोग किए जाने वाले किसी भी उत्पाद को सदस्यों (यानी डब्ल्यूसीएफ) पर प्रतिबिंबित किया जाता है, तो आप बनाए गए "सुंदर" बैकिंग फ़ील्ड के बजाय उलझन वाले बैकिंग फ़ील्ड नाम देखेंगे।

यह बहुत महत्वपूर्ण हो सकता है अगर आपने पहले सेवा तक पहुंच प्रदान की हो या यदि आप उसी वर्ग संरचना में प्राप्त होने वाले अंतराल पर deserialize (यानी वही कक्षाएं डब्ल्यूसीएफ पाइप के दोनों सिरों पर उपयोग की जाती हैं)। इस मामले में, आप अनिवार्य रूप से deserialize करने में सक्षम नहीं होंगे क्योंकि आप गारंटी दे सकते हैं कि बैकिंग फ़ील्ड नाम वही है जब तक आप स्रोत कोड के विपरीत एक ही डीएलएल साझा नहीं करते।

थोड़ा और स्पष्टीकरण: मान लीजिए कि आपके पास एक वेब सेवा है जो आपके कुछ व्यवसायिक वस्तुओं को डब्ल्यूसीएफ पर आपके द्वारा बनाए गए चांदी के क्लाइंट क्लाइंट को उजागर करती है। अपने व्यावसायिक तर्क का पुन: उपयोग करने के लिए, आपका सिल्वरलाइट क्लाइंट आपके व्यावसायिक ऑब्जेक्ट्स के लिए स्रोत कोड के संदर्भ जोड़ता है। यदि आपके पास स्वत: कार्यान्वित गुण हैं, तो आपके पास बैकिंग फ़ील्ड नाम पर कोई नियंत्रण नहीं है। चूंकि डब्ल्यूसीएफ सदस्यों को क्रमबद्ध करता है और गुण नहीं, इसलिए आप यह सुनिश्चित नहीं कर सकते कि WCF सेवा से चांदी की रोशनी में स्थानांतरित ऑब्जेक्ट सही ढंग से deserialize होगा क्योंकि बैकिंग फ़ील्ड नाम लगभग निश्चित रूप से मेल नहीं खाएंगे।

https://code.i-harness.com

मैं FIELDS पर संपत्ति के फायदों को समझता हूं, लेकिन मुझे लगता है कि मैन्युअल कार्यान्वित गुणों पर ऑटो-लागू गुणों का उपयोग करने से वास्तव में कोड को देखने के लिए थोड़ा और संक्षिप्त बनाने के अलावा कोई लाभ नहीं मिलता है।

मैं इसका उपयोग करके अधिक आरामदायक महसूस करता हूं:

    private string _postalCode;

    public string PostalCode
    {
        get { return _postalCode; }
        set { _postalCode = value; }
    }

के बजाय:

public string PostalCode { get; set; }

मुख्य रूप से क्योंकि यदि मैं कभी भी प्राप्त करने और सेट करने के किसी भी तरह के कस्टम कार्यान्वयन करना चाहता हूं, तो मुझे किसी भी निजी क्षेत्र द्वारा समर्थित अपनी खुद की संपत्ति बनाना है। तो क्यों शुरुआत से बुलेट को काटते हैं और निरंतरता के लिए सभी गुणों को इस लचीलापन को तुरंत देते हैं? यह वास्तव में एक अतिरिक्त सेकंड नहीं लेता है, यह देखते हुए कि आपको विजुअल स्टूडियो में जो करना है, वह आपके निजी फ़ील्ड नाम पर क्लिक करें, और Ctrl + E दबाएं, और आप कर चुके हैं। और यदि मैं इसे मैन्युअल रूप से करता हूं, तो मैं असंगतता के साथ समाप्त होता हूं जिसमें कुछ विशेष रूप से निजी फ़ील्ड द्वारा समर्थित सार्वजनिक गुणों और कुछ ऑटो-कार्यान्वित गुणों का निर्माण किया जाता है। मैं चारों ओर सुसंगत होने के साथ-साथ सभी ऑटो या सभी मैनुअल के साथ बेहतर महसूस करता हूं।

क्या यह सिर्फ मुझे है? क्या मैं कुछ भूल रहा हूँ? क्या मैं कुछ भूल गया हूँ? क्या मैं स्थिरता पर बहुत अधिक जोर दे रहा हूं? मैं हमेशा सी # सुविधाओं के बारे में वैध चर्चाएं पा सकता हूं, और लगभग हर चीज के लिए हमेशा पेशेवर और विपक्ष होते हैं, लेकिन इस मामले में, मैं वास्तव में ऑटो-कार्यान्वित गुणों का उपयोग करने के खिलाफ अनुशंसा करने वाले किसी भी व्यक्ति को नहीं ढूंढ पाया।


ऐसे लोग हैं जो सोचते हैं कि स्वचालित गुण कुछ हद तक बुरा हो सकते हैं लेकिन इसके अलावा वे सिंटैक्टिक चीनी हैं। आपको कोड की कुछ पंक्तियों को सहेजने के अलावा उन्हें उपयोग करके कुछ भी हासिल नहीं होता है और आप संभावित रूप से अपने लिए अधिक काम कर सकते हैं (इसे बाद में मैन्युअल रूप से कार्यान्वित करके, क्योंकि आप कुछ जांच करना चाहते हैं या किसी ईवेंट को उठाना चाहते हैं)। प्रोग्रामिंग (इम्हो) में संगठनात्मकता काफी मूल्यवान है।


मैं हर किसी के बारे में नहीं जानता, लेकिन मुझे लगता है कि मुझे अपने चर और कार्यों का नाम क्या देना चाहिए ताकि अन्य लोग मेरे कोड को समझ सकें।

इसलिए जब मैं स्वत: अनुपूरित गुणों का उपयोग करता हूं, तो मुझे केवल एक बार रोकना होगा

जब मुझे बैकिंग फ़ील्ड की आवश्यकता होती है तो मुझे दो बार रोकना पड़ता है , इसलिए यह थोड़ा सा विकास धीमा कर देता है :)

जिस तरह से मैं करता हूं वह है:

  1. शुरुआत में इसे एक निजी चर बनाओ
  2. यदि आवश्यक हो तो इसे सार्वजनिक ऑटो-लागू करें।
  3. अगर मुझे कुछ कोड प्राप्त करने या सेट करने की आवश्यकता है तो इसे बैकिंग फ़ील्ड में बदलें।

यदि कक्षा के विभिन्न गुण अलग-अलग सामने आते हैं तो कुछ भी गलत नहीं है।


यह आपको संक्षिप्त होने से परे कुछ अतिरिक्त प्रदान नहीं करता है। यदि आप अधिक वर्बोज़ सिंटैक्स पसंद करते हैं, तो हर तरह से इसका उपयोग करें।

ऑटो प्रोप का उपयोग करने का एक फायदा यह है कि यह आपको एक मूर्ख कोडिंग गलती से संभावित रूप से सहेज सकता है जैसे कि गलती से गलत निजी वैरिएबल को किसी संपत्ति में असाइन करना। मेरा विश्वास करो, मैंने इसे पहले किया है!

ऑटो प्रोप के बारे में आपका बिंदु बहुत लचीला नहीं है एक अच्छा है। आपके पास केवल एक ही लचीलापन है जो या तो स्कोप को सीमित private set लिए private get या private set का उपयोग कर रहा है। यदि आपके गेटर्स या सेटर्स के पास कोई जटिलता है तो ऑटो प्रोप अब एक व्यवहार्य विकल्प नहीं हैं।







encapsulation