CLR via CSharp अध्याय 10 "गुण" में जेफ रिक्टर लिखते हैं:फ़ील्ड या विधि निष्पादन से संपत्ति निष्पादन धीमा क्यों है?
एक संपत्ति विधि एक लंबे समय निष्पादित करने के लिए ले जा सकते हैं; फाई ग्रैंड एक्सेस हमेशा तुरंत पूरा हो जाता है। गुणों का उपयोग करने का एक आम कारण थ्रेड सिंक्रोनि-जेशन निष्पादित करता है, जो हमेशा के लिए थ्रेड को रोक सकता है, और इसलिए, यदि सिंक्रनाइज़ेशन आवश्यक है तो एक संपत्ति का उपयोग नहीं किया जाना चाहिए। उस स्थिति में, एक विधि को प्राथमिकता दी जाती है। इसके अलावा, यदि आपकी कक्षा को दूरस्थ रूप से एक्सेस किया जा सकता है (उदाहरण के लिए, आपकी कक्षा सिस्टम.MarshalByRefObject से ली गई है), संपत्ति विधि को कॉल करना बहुत धीमा हो जाएगा, और इसलिए, संपत्ति के लिए एक विधि को प्राथमिकता दी जाती है। मेरी राय में, MarshalByRefObject से प्राप्त कक्षाओं को कभी भी गुणों का उपयोग नहीं करना चाहिए।
क्या यह मामला तब भी है जब संपत्ति को केवल निजी क्षेत्र में वापस करने के लिए परिभाषित किया गया हो? विधि सिंक्रनाइज़ेशन में पसंदीदा क्यों है? और विधि मार्शलबीरफॉबजेक्ट परिदृश्य में क्यों पसंद किया गया है?
मेरे प्रश्न को स्पष्ट करने के लिए:
जेफ एक कंबल कथन बना रहा है कि गुणों की सलाह नहीं दी जाती है, और उन 2 परिदृश्यों में वे विधियां बेहतर हैं। जैसा कि जो व्हाइट ने बताया, गुणों में मनमाना कोड हो सकता है। लेकिन विधियां एक ही मनमानी कोड चला सकती हैं। यही वह हिस्सा है जिसमें मुझे कठिनाई हो रही है। क्या सिंक्रनाइज़ेशन या मार्शलिंग के लिए गुणों (विधियों का उपयोग किया जाता है) पर विधियों का उपयोग करने में वास्तव में लाभ होता है, या क्या उन्हें केवल भाषा सम्मेलन में कोई समस्या है?
जेफ का मुद्दा यह है कि एक "गेटब्लह" विधि कॉल * पाठक को संवाद करता है * "यह धीमा हो सकता है" और "ब्लाह" संपत्ति संचार करती है "यह लगभग निश्चित रूप से तेज़ है"। तो यदि आप कुछ धीमा करने जा रहे हैं, तो इसे एक विधि बनाएं। मैं पूरी तरह से * इस सलाह से सहमत नहीं हूं - उदाहरण के लिए, मैं अक्सर उन गुणों को बना देता हूं जिनमें धीमे * संभावित रूप से सबसे खराब मामले * होते हैं लेकिन उत्कृष्ट * अमूर्त * प्रदर्शन होते हैं। लेकिन जेफ की सलाह निश्चित रूप से एक अच्छा प्रारंभिक बिंदु है; एक बार जब आप जानते हैं कि आप क्या कर रहे हैं तो इससे विचलित हो जाएं। –