2011-01-15 12 views
6

इस कोड नमूने में:कौन सा बेहतर है? निजी स्थिर बनाम निजी

public class SuperMan { 
    private static bool IsProper(decimal x) { 
     return x > 31.0m && x < 45.0m; 
    } 

    public bool CheckStuff(string a, string b, string c) { 
     // lots of code, some of which introduces a variable x 
     return IsProper(x) && /* other conditions */; 
    } 
} 

चाहिए IsProper (..) एक 'निजी स्थिर' या 'निजी' हो। मान लिया जाये कि:

  1. IsProper (..) किसी भी घटना राज्य का उपयोग करने की जरूरत नहीं है
  2. हम प्रदर्शन दो विकल्पों के बीच अलग (बातें हम कभी नहीं करना चाहिए में से एक के बारे में चिंतित नहीं हैं (यहां तक ​​कि भविष्य में।) वास्तविक माप के बिना प्रदर्शन के बारे में लगता है कि और आवश्यकता के बिना अनुकूलन कर दिया जाए।)
+3

'IsProper' के भविष्य के संस्करणों उदाहरण राज्य का उपयोग कर सकते होगा? – CodesInChaos

+0

नहीं ... मैं इसे स्पष्ट करने के लिए प्रश्न संपादित कर दूंगा। – kidoman

उत्तर

4

यह स्थिर हो सकता है, क्योंकि यह सुपरमैन वर्ग है और न ही अपने सदस्यों के साथ कुछ करने की आवश्यकता प्रतीत नहीं होता है। लेकिन आपको खुद से पूछना चाहिए कि क्या वह कार्य उस कक्षा में है।

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

+1

यह निजी है, इसलिए कोई अनुमान लगा सकता है कि यह एक सहायक है। यदि वही कोड कहीं और उपयोग किया जाता है, तो यह तब बेस क्लास या सहायक वर्ग में होता है। – leppie

+0

यह एक सहायक काम है। – kidoman

+1

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

0

स्थिर तरीके थोड़ा तेज़ हो सकते हैं, लेकिन दूसरी तरफ कभी-कभी इसे रिफैक्टर करना कठिन हो सकता है।

+0

कैसा है? क्या आप हमें एक उदाहरण दे सकते हैं। – kidoman

+0

@ KiD0M4N, राफ सही है, स्थैतिक तेज है क्योंकि स्थैतिक निर्माण की कोई आवश्यकता नहीं है, लेकिन आपको अवांछित परिणामों से रोकने के लिए अपरिवर्तनीय वस्तुओं या स्टेटलेस स्थितियों पर स्थैतिक विधि का उपयोग करना चाहिए। –

+0

यदि आपको विधि को कॉल करने के लिए ऑब्जेक्ट बनाने की आवश्यकता है, तो यह सच है, लेकिन यदि आपको पहले से ही उदाहरण मिला है, तो प्रदर्शन में अंतर उपेक्षित है। यह अस्तित्व में है, लेकिन आपको इसके बारे में चिंता करने की आवश्यकता नहीं है, जब तक कि आप कुछ शीर्ष पायदान 4 डी प्रतिपादन इंजन नहीं लिख रहे हों। – GolezTrol

2

कारण IsProper एक उदाहरण सदस्य बनाने के लिए:

  • IsProper एक विरासत कक्षा में एक और कार्यान्वयन की जरूरत है
  • IsProper भविष्य में

कारण एक स्थिर IsProper बनाने के लिए सदस्यों के लिए उपयोग की आवश्यकता हो सकती सदस्य:

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