2009-12-06 13 views
11

संभव डुप्लिकेट:
Properties vs Methodsएक संपत्ति बनाम एक विधि का उपयोग कब करें?

वहाँ जब एक विधि बनाम एक संपत्ति का उपयोग करने के लिए के रूप में किसी भी नियम या सामान्य सबसे अच्छा अभ्यास है? तकनीकी रूप से किसी भी पैरामीटर रहित विधि को किसी संपत्ति में बनाया जा सकता है और किसी भी संपत्ति को एक विधि बनाया जा सकता है, लेकिन कभी-कभी यह तय करने के लिए कि किसी दूसरे का उपयोग कब किया जा सकता है।

मैं उन दोनों नियमों को प्राप्त करने की उम्मीद कर रहा था जिन्हें आप दोनों के बीच निर्णय लेने पर ध्यान में रखते थे।

उत्तर

12

सामान्य मानक दुष्प्रभाव है। यदि किसी सदस्य को मूल्य प्राप्त करने के लिए बुलाकर आप केवल उस मूल्य को प्राप्त करते हैं तो यह एक संपत्ति है। यदि दुष्प्रभाव हैं, तो यह शायद एक विधि होनी चाहिए।

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

+6

अपवाद फेंकना नहीं? यदि मूल्य सेट अमान्य मान है तो आप क्या करेंगे? मैंने सोचा था कि फ़ील्ड पर गुणों का उपयोग करने के कारणों में से एक था ... इसे स्वीकार करने से पहले मूल्य पर चेक करने की क्षमता। – Svish

5

क्या क्लेटस ने कहा है जोड़ने के लिए।

यह MSDN से है: "संपत्ति प्रयोग दिशानिर्देश" http://msdn.microsoft.com/en-us/library/bzwdh01d(VS.71).aspx देखें "गुण बनाम तरीके" अनुभाग:

  • आपरेशन ऐसे Object.ToString के रूप में एक रूपांतरण, है।
  • ऑपरेशन इतना महंगा है कि आप उपयोगकर्ता से संवाद करना चाहते हैं कि उन्हें परिणाम कैशिंग पर विचार करना चाहिए।
  • पहुंच प्राप्तकर्ता का उपयोग करके संपत्ति मूल्य प्राप्त करना एक अवलोकन दुष्प्रभाव होगा।
  • उत्तराधिकार में सदस्य को दो बार कॉल करना अलग-अलग परिणाम उत्पन्न करता है।
  • निष्पादन का आदेश महत्वपूर्ण है। ध्यान दें कि किसी प्रकार के गुणों को किसी भी क्रम में सेट और पुनर्प्राप्त करने में सक्षम होना चाहिए।
  • सदस्य स्थिर है लेकिन एक मूल्य लौटाता है जिसे बदला जा सकता है।
  • सदस्य एक सरणी देता है। गुण जो सरणी लौटते हैं वे बहुत भ्रामक हो सकते हैं। आम तौर पर आंतरिक सरणी की एक प्रति वापस करना आवश्यक है ताकि उपयोगकर्ता आंतरिक स्थिति को बदल न सके। यह इस तथ्य के साथ मिलकर है कि एक उपयोगकर्ता आसानी से मान सकता है कि यह एक अनुक्रमित संपत्ति है, अक्षम कोड की ओर जाता है। निम्न कोड उदाहरण में, विधि गुणों के लिए प्रत्येक कॉल सरणी की एक प्रति बनाता है। नतीजतन, सरणी की 2 एन + 1 प्रतियां निम्न लूप में बनाई जाएंगी।
1

कुछ एर के दौरान संपत्ति का उपयोग करें .. संपत्ति तेजी से प्रदर्शन कर रही है (उदा। Ctrl.color, ctrl.Text, ctrl.Width, dateTime.अब)। लेकिन अगर यह किसी प्रक्रिया को इंगित करता है, तो विधि का उपयोग करें (उदा। str.GetHash(), machine.GetFqdn(), file.GetMd5())। तो फ़ाइल md5 में, आप इसे एक संपत्ति

यह जोर देना नहीं होगा सबसे when to use a method:

आपरेशन काफी महंगा है कि आप उपयोगकर्ता कि वे कैशिंग पर विचार करना चाहिए करने के लिए बातचीत करना चाहते है परिणाम।

ध्यान दें कि .NET की दिनांक समय।अब, हालांकि यह जितना तेज़ है और एक संपत्ति है, इसे कैश किया जाना चाहिए जब इसे आपके प्रोग्राम में कई बार कहा जाता है, यहां तक ​​कि एक-दूसरे के पास भी। उन्होंने इसे एक संपत्ति बनाने का फैसला किया, संपत्ति में वर्तमानता का अनुभव है, जब आप किसी विधि को कॉल करते हैं, तो इसमें तत्कालता/वर्तमानता का अनुभव नहीं होता है। इसलिए आपको यह ध्यान रखना होगा कि जब भी आपको कोई मूल्य मिलता है और उसे कैश किया जाता है, लेकिन यदि उसे तत्काल महसूस करने की आवश्यकता है, तो हर तरह से संपत्ति का उपयोग करें।

सब कुछ, अगर कुछ वास्तव में तेज़ है और महंगे ऑपरेशन की तरह महसूस नहीं करता है, तो इसमें एक ऐसा निर्माण होना चाहिए जो इसकी स्थिरता व्यक्त कर सके। मुझे लगता है कि यही कारण है कि .NET आकर्षक है (या किसी भी भाषा में संपत्ति निर्माण है), यह डेवलपर्स को विधि बनाने के लिए मजबूर नहीं करता है जब आप इसे एक संपत्ति बना सकते हैं, यह डेवलपर्स को विधि का उपयोग करने के लिए बाध्य नहीं करता है जब आप एक कर सकते हैं ओवरलोडेड ऑपरेटरों के आसपास प्रदर्शन कोड, यह व्यावहारिक प्रोग्रामिंग है अपने सर्वोत्तम

0

यह एक अच्छा सवाल है। मुझे इसके बारे में कोई अच्छा अभ्यास नहीं पता है। मेरी राय में, यह आमतौर पर एक सामान्य ज्ञान का सवाल है।

प्रॉपर्टीज ऑब्जेक्ट/क्लास से संबंधित हैं और आमतौर पर इसका वर्णन करती हैं। यूआई तत्व, पृष्ठभूमि, रंग, IsEnabled का सबसे अच्छा उदाहरण मालिकाना हैं।

विधियां आम तौर पर क्रिया होती हैं कि ऑब्जेक्ट/क्लास प्रदर्शन कर सकती है और परिणाम दे सकती है। संदेशबॉक्स का विधि शो यहां सबसे अच्छा उदाहरण है। यह एक कार्रवाई करता है और परिणाम देता है।

0

मौलिक स्तर पर एक संपत्ति या विधि चुनने का निर्णय 'है', 'करता है' तर्क पर निर्भर करता है। यदि आपको आवश्यक जानकारी एक गुण या गुणवत्ता गुणों के साथ जाना है। यदि यह एक क्रिया है तो विधियों।

लेकिन व्यावहारिक स्तर पर इसे हर समय इसे लागू करना मुश्किल हो सकता है।

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

इसे मूल शब्दों के साथ कहकर, एक वस्तु वस्तु का वर्णन करती है, जबकि एक विधि एक क्रिया है जो वस्तु कर सकती है। किसी ऑब्जेक्ट के लिए जो कार का प्रतिनिधित्व करता है, drive() एक विधि होगी, और color एक संपत्ति होगी।

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