.NET

2008-10-02 9 views
12

में गुण या विधियों के रूप में सदस्य ऑब्जेक्ट्स का खुलासा करना .NET में, यदि किसी वर्ग में कोई क्लास ऑब्जेक्ट होता है, तो उस सदस्य को संपत्ति या विधि के रूप में उजागर किया जाना चाहिए?.NET

उत्तर

11

यदि आप जो भी कर रहे हैं वह ऑब्जेक्ट इंस्टेंस का खुलासा कर रहा है जो वर्तमान ऑब्जेक्ट की स्थिति से प्रासंगिक है, तो आपको किसी संपत्ति का उपयोग करना चाहिए।

एक विधि का उपयोग तब किया जाना चाहिए जब आपके पास कुछ तर्क है जो मेमोरी ऑब्जेक्ट तक पहुंचने से अधिक कर रहा है और उस मान को वापस कर रहा है या जब आप उस क्रिया को कर रहे हैं जिस पर वर्तमान ऑब्जेक्ट की स्थिति पर व्यापक प्रभाव पड़ता है।

1

संपत्ति। एक संपत्ति मूल रूप से सिर्फ एक 'सस्ता' विधि है। ऑब्जेक्ट का संदर्भ प्राप्त करना या सेट करना बहुत सस्ता है।

बस स्पष्ट करने के लिए, गुण आमतौर पर किसी ऑब्जेक्ट की आंतरिक स्थिति का प्रतिनिधित्व करना चाहिए। हालांकि, एक संपत्ति या विधि के रूप में एक सदस्य के कार्यान्वयन से उपयोगकर्ता को बताता है कि कॉल कितना महंगा हो सकता है।

+0

हू? एक प्रॉपर्टी सेट ऑब्जेक्ट क्रमबद्धता को ट्रिगर कर सकता है और डेटाबेस अपडेट या वेब सेवा कॉल का कारण बन सकता है। सस्ते के लिए यह कैसा है? –

+1

आप सही हैं कि एक संपत्ति कुछ भी कर सकती है क्योंकि यह कुछ तरीकों के लिए सिर्फ सिंथेटिक चीनी है। मेरा कहना था कि एक संपत्ति * सस्ता होना चाहिए। यदि ऐसा नहीं है तो इसे एक स्पष्ट विधि बनाएं। –

1

गुण कक्षाओं के भीतर उदाहरणों को मान पढ़ते हैं और आवंटित करते हैं।

तरीके कक्षा में निर्दिष्ट डेटा के साथ कुछ करते हैं।

3

यह इस मामले के लिए अप्रासंगिक है।

यदि संपत्ति वस्तु की स्थिति के बारे में कुछ विवरण है तो यह संपत्ति होनी चाहिए।

यह विधि होनी चाहिए यदि यह ऑब्जेक्ट पर कुछ क्रिया करता है।

18

आपको किसी भी चीज के लिए गुणों का उपयोग करना चाहिए जो अवधारणात्मक रूप से वस्तु के राज्य का प्रतिनिधित्व करता है, जब तक कि इसकी पुनर्प्राप्ति एक महंगी पर्याप्त ऑपरेशन नहीं है जिसे आपको बार-बार उपयोग करने से बचना चाहिए।

MSDN से

:

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

  • सदस्य एक तार्किक डेटा सदस्य होने पर संपत्ति का उपयोग करें। निम्नलिखित सदस्य घोषणाओं में, नाम एक संपत्ति है क्योंकि यह कक्षा का तार्किक सदस्य है।

    • आपरेशन ऐसे Object.ToString के रूप में एक रूपांतरण, है:

      public string Name 
      get 
      { 
          return name; 
      } 
      set 
      { 
          name = value; 
      } 
      
    • एक विधि जब का उपयोग करें।

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

      Type type = // Get a type. 
      for (int i = 0; i < type.Methods.Length; i++) 
      { 
          if (type.Methods[i].Name.Equals ("text")) 
          { 
           // Perform some operation. 
          } 
      } 
      

निम्न उदाहरण गुण और विधियों के सही उपयोग को दिखाता है।

class Connection 
    { 
     // The following three members should be properties 
     // because they can be set in any order. 
     string DNSName {get{};set{};} 
     string UserName {get{};set{};} 
     string Password {get{};set{};} 

     // The following member should be a method 
     // because the order of execution is important. 
     // This method cannot be executed until after the 
     // properties have been set. 
     bool Execute(); 
    } 
1

अवलोकन

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

सिंटेक्स

कैसे एक वर्ग के सदस्य प्रयोग की जाने वाली भी है कि क्या यह एक संपत्ति या एक विधि के रूप में प्रतिनिधित्व किया जाना चाहिए एक निर्णायक हो सकता है जा रहा है। एक पैरामीटरयुक्त संपत्ति से जानकारी पुनर्प्राप्त करने के लिए वाक्यविन्यास फ़ंक्शन के रूप में लागू विधि के लिए उपयोग किए गए वाक्यविन्यास के लगभग समान है। हालांकि, इस तरह के मूल्य को संशोधित करने के लिए वाक्यविन्यास थोड़ा अलग है।

आप एक संपत्ति के रूप में एक वर्ग के सदस्य को लागू हैं, तो आप इसे इस तरह मान संशोधित करना होगा:

ThisObject.ThisProperty (सूचकांक) = NEWVALUE

अगर वर्ग के सदस्य एक के रूप में लागू किया जाता है विधि, मूल्य संशोधित किया जा रहा एक तर्क का उपयोग कर संशोधित किया जाना चाहिए:

ThisObject.ThisProperty (सूचकांक, nEWVALUE)

त्रुटियां

केवल पढ़ने योग्य संपत्ति को मान निर्दिष्ट करने का प्रयास किसी विधि को समान कॉल से अलग त्रुटि संदेश लौटाएगा। सही ढंग से कार्यान्वित वर्ग के सदस्यों ने त्रुटि संदेशों को वापस कर दिया है जो व्याख्या करना आसान है।

0

मैं पहले उपयोग संपत्ति और विधि के बारे में उलझन में था। लेकिन अब मैं इस नियम का उपयोग MSDN Guideline:

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

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

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