2011-01-21 9 views
5

मेरे पास एक सदस्य फ़ंक्शन है जो कक्षा के किसी भी सदस्य चर पर निर्भर नहीं है। (मेरे मामले में कक्षा एक एएसपी.NET पृष्ठ है)यदि कोई वर्ग सदस्यों की आवश्यकता नहीं है तो स्थिर कार्यों का उपयोग करना बेहतर है?

फ़ंक्शन सुरक्षित है, मुझे इस कक्षा के बाहर इसकी आवश्यकता नहीं है। इसका एकमात्र उद्देश्य किसी दिए गए ऑब्जेक्ट से यूआरएल बनाना है।

क्या मुझे अपने सभी कार्यों को स्थैतिक बनाना चाहिए यदि वे कक्षा पर निर्भर न हों, भले ही उन्हें इस कक्षा के बाहर उपयोग न किया जाए? क्या ऐसा करने के लिए प्रदर्शन या रखरखाव जैसी कोई वजह है?

उत्तर

5

ऐसे कार्य करने के लिए अच्छा अभ्यास है जो सदस्य डेटा स्थिर के साथ बातचीत नहीं करते हैं। यह सिर्फ यह वर्णन करने में मदद करता है कि समारोह अपने पर्यावरण के साथ कैसे कार्य करता है। यद्यपि कोई प्रदर्शन समस्या नहीं होनी चाहिए।

+2

एक छोटा प्रदर्शन मुद्दा है (इस परम छिपी नहीं है) लेकिन यह निर्णायक कारक नहीं होना चाहिए। इरादा (आपका पहला बिंदु) अधिक महत्वपूर्ण है। –

+0

@ हेनक होल्टरमैन: बेशक, लेकिन यह एक बहुत छोटा प्रदर्शन मुद्दा है। यदि यह एक स्थिर संरक्षित कार्य है, तो शायद यह कुछ प्रकार का सहायक कार्य है, इस प्रकार यह पहले से ही गुजर रहा है और/या डेटा भी लौटा रहा है। –

1

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

1

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

मुझे नहीं लगता कि स्थैतिक के साथ कोई प्रदर्शन समस्या है, अगर कुछ भी तेज़ हो। बस .NET के नए संस्करणों में दिखाई देने वाले सभी एक्सटेंशन विधियों के बारे में सोचें। वे सभी स्थिर हैं!

6

शायद, लेकिन मैं इसे एक कदम आगे ले जाऊंगा।

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

0

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