2013-05-23 2 views
16

मुझे लगता है कि यह एक ढांचा डिजाइन सवाल है। मैंने हाल ही में सोचा कि क्यों System.Array में अधिकांश विधियां स्थिर हैं। मेरा आंत प्रतिक्रिया हमेशा उपयोग करना है उदा। इंडेक्सऑफ (ऑब्जेक्ट) ऐरे इंस्टेंस पर, System.Array.IndexOf (सरणी, ऑब्जेक्ट) के रूप में नहीं। निर्णय के पीछे कोई मुख्य सिद्धांत है, चाहे कोई विधि स्थिर हो या नहीं?सिस्टम के अधिकांश तरीके क्यों हैं। अराजक स्थिर?

मैं इस सवाल पाया: When is it best to use Static Functions in ASP.NET

लेकिन यह मुझे पूरा नहीं किया: -/

+2

(मैंने एएसपी.नेट टैग हटा दिया, क्योंकि 'ऐरे' आदि का डिज़ाइन एएसपी.नेट से संबंधित नहीं है) –

+0

मैं निर्धारित करता हूं कि उनमें से अधिकतर स्थिर हैं क्योंकि वे केवल सरणी और विस्तार विधियों के लिए नहीं हैं उस समय का आविष्कार किया। – Romoku

+1

@Romoku वे अभी भी, उदाहरण के तरीकों हो सकता है, हालांकि –

उत्तर

1

सबसे अधिक समय आप System.Array के वारिस एक भी आयाम सरणी का उपयोग कर रहा है। जैसे:

int[] a1 = new int[2]; 

जब आप int[] परिभाषित इस परोक्ष @Sergey Rybalkin तरह System.Array प्रकार से ली गई है। इस मामले में विधि IndexOf निश्चित रूप से एक उदाहरण विधि के रूप में लागू किया जाएगा, न कि स्थैतिक विधि के रूप में।

लेकिन एक और प्रकार है जो सिस्टम से प्राप्त होता है। बहु आयाम सरणी जैसे आरे। इस मामले में (बहु आयाम) विधि IndexOf समझ में नहीं आता है।

टेस्ट इस:

int[,] arr = new int[2, 2]; 

arr[0, 0] = 3; arr[1, 0] = 4; 
arr[0, 1] = 5; arr[1, 1] = 6; 

Array.IndexOf(arr, 4); 

पिछले की तरह है कि इस विधि स्थिर के रूप में कार्यान्वित किया जाता है की वजह से संदेश "Only single dimension arrays are supported here."

के साथ एक RankException फेंकता शायद, और सबसे शायद,।

...

टिप्पणी Is there a main principle behind the decision, whether to make a method static or not?

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

System.Math कक्षा में सोचें कि अगर आपको Sqrt या Pow जैसी विधि को कॉल करने के लिए उदाहरण गणित की आवश्यकता है तो गड़बड़ी कैसे होगी?

अंतिम उदाहरण मैं आपको दूंगा System.Text.RegularExpressions.Regex कक्षा है। इस वर्ग में Match विधि उदाहरण के रूप में लागू की गई है और एक अधिभार स्थिर के रूप में लागू किया गया है।

हर कमरे में एक ऐसे भिन्न संदर्भ में प्रयोग किया जाता है। उदाहरण का उपयोग तब किया जाता है जब आप एक ही पैटर्न का कई बार उपयोग करते हैं। स्थैतिक जब आप पैटर्न को अपने कोड में एक अद्वितीय समय का उपयोग करते हैं।

+4

"अगर उत्तर प्रबुद्ध था तो कृपया चिह्नित करें ..."? :- पी नहीं, .. सही उत्तर के रूप में चिह्नित करें * यदि यह सही उत्तर है *। – Patrick

+0

मुझे नहीं लगता कि आपके अतिरिक्त उदाहरण काफी उपयुक्त हैं। 'System.Math' के 'वर्ग' या 'Pow' उदाहरण विधियों जैसे कार्यों को बनाने में कोई मतलब नहीं होगा क्योंकि उन कार्यों * को' System.Math' instance * की आवश्यकता नहीं है। दूसरी ओर, उन्हें विभिन्न प्रकार के उदाहरण जैसे 'डबल' इत्यादि के उदाहरण विधियों को कल्पना करने योग्य माना जाएगा। नियमित अभिव्यक्तियों के लिए, स्थैतिक विधि अद्वितीय आमंत्रण आईएमओ के लिए * बेहतर प्रदर्शन नहीं करती है; यह सिर्फ कोड को छोटा करने में मदद करता है। –

+0

@ ओ। आर मैपर आप सही उदाहरण विधि बेहतर प्रदर्शन करते हैं। मैंने पाठ को सही किया। –

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