[c#] सी # [डुप्लिकेट] में स्थिर कक्षाओं का उपयोग कब करें



Answers

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

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

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

अपने भीतर के ओओपी के संपर्क में रहें और आप कभी गलत नहीं हो सकते!

Question

इस प्रश्न का उत्तर यहां दिया गया है:

स्टेटिक क्लासेस का उपयोग कब करें के तहत एमएसडीएन को क्या कहना है :

static class CompanyInfo
{
    public static string GetCompanyName() { return "CompanyName"; }
    public static string GetCompanyAddress() { return "CompanyAddress"; }
    //...
}

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

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




स्टेटिक कक्षाएं बहुत उपयोगी हैं और एक जगह है, उदाहरण के लिए पुस्तकालय।

सबसे अच्छा उदाहरण मैं प्रदान कर सकता हूं नेट मैथ क्लास, एक सिस्टम नेमस्पेस स्थैतिक वर्ग जिसमें गणित कार्यों की एक लाइब्रेरी है।

यह किसी और चीज की तरह है, नौकरी के लिए सही उपकरण का उपयोग करें, और यदि कुछ भी दुरुपयोग नहीं किया जा सकता है।

स्पष्ट रूप से स्थैतिक वर्गों को गलत के रूप में खारिज कर दें, उनका उपयोग न करें, या कहें कि "केवल एक ही हो सकता है" या कोई भी, उनका उपयोग करने के समान गलत नहीं है।

सी # .Net में कई स्थैतिक वर्ग शामिल हैं जो गणित वर्ग की तरह ही उपयोग किए जाते हैं।

इसलिए सही कार्यान्वयन दिया गया है कि वे काफी उपयोगी हैं।

हमारे पास एक स्थिर टाइमज़ोन क्लास है जिसमें कई व्यवसाय संबंधित टाइमज़ोन फ़ंक्शंस हैं, कक्षा के कई उदाहरण बनाने की आवश्यकता नहीं है, इसलिए गणित वर्ग में यह एक स्थिर वर्ग में वैश्विक स्तर पर एक्सेसिबल टाइमज़ोन वास्तविक कार्यों (विधियों) का एक सेट है ।




MSDN आधार पर:

  1. आप स्थैतिक वर्गों के लिए उदाहरण नहीं बना सकते हैं
  2. यदि वर्ग स्थिर के रूप में घोषित किया गया है, तो सदस्य चर उस कक्षा के लिए स्थिर होना चाहिए
  3. मुहरबंद [विरासत नहीं किया जा सकता]
  4. इंस्टेंस कन्स्ट्रक्टर नहीं हो सकता है
  5. स्मृति प्रबंधन

उदाहरण: गणित की गणना (गणित मान) में परिवर्तन नहीं होता है [निर्धारित मूल्यों के लिए मानक गणना]




जब मैं पुन: उपयोग की अपनी इकाई के रूप में कक्षाओं की बजाय कार्यों का उपयोग करना चाहता हूं, तो मैंने स्थिर वर्गों का उपयोग करना शुरू कर दिया है। पहले, मैं स्थिर वर्गों की बुराई के बारे में सब कुछ था। हालांकि, सीखने F# ने मुझे उन्हें एक नई रोशनी में देखा है।

इससे मेरा क्या आशय है? खैर, कुछ सुपर DRY कोड काम करते समय कहें, मैं एक-विधि वर्गों के समूह के साथ समाप्त होता हूं। मैं इन विधियों को एक स्थिर वर्ग में खींच सकता हूं और फिर उन्हें प्रतिनिधि का उपयोग करके निर्भरताओं में इंजेक्ट कर सकता हूं। यह ऑटोफैक पसंद के मेरे निर्भरता इंजेक्शन (डीआई) कंटेनर के साथ अच्छी तरह से खेलता है।

बेशक एक स्थिर विधि पर प्रत्यक्ष निर्भरता लेना अभी भी बुरा है (कुछ गैर-बुरे उपयोग हैं)।




यदि आप कोड विश्लेषण टूल (उदाहरण के लिए, FxCop ) का उपयोग करते हैं, तो यह अनुशंसा करेगा कि यदि आप इंस्टेंस डेटा तक नहीं पहुंचते हैं तो आप अपनी विधि (स्थिर) स्थिर बनाते हैं। तर्क यह है कि एक प्रदर्शन लाभ है। रेफरी: सीए 1822: सदस्यों को स्थैतिक ( MSDN ) के रूप में चिह्नित करें

यह एक नियम की तुलना में एक दिशानिर्देश है, वास्तव में ...




Related