2010-11-19 21 views
5

का विस्तार करने के लिए विस्तार विधि मुझे आश्चर्य है कि क्या मैं System.Net.Mime.MediaTypeNames.Image जैसे स्थिर वर्ग का विस्तार करने के लिए विस्तार विधि या अन्य तकनीकों का उपयोग कर सकता हूं, इसकी आवश्यकता से कम प्रकार है।स्थिर वर्ग

+0

आप स्थिर वर्गों का विस्तार नहीं कर सकते हैं; इस प्रश्न के डुप्लिकेट के लिए SO खोजें और आप कुछ कामकाज देखेंगे। – BeemerGuy

+0

आपको इसकी आवश्यकता क्यों होगी? स्टेटिक क्लास का कोई संदर्भ नहीं है, और जो भी आप एक स्थिर वर्ग के अंदर कर सकते हैं कोड में "कहीं भी" किया जा सकता है। –

+0

@ एम्बी - मुझे लगता है कि आप इसे पूरी तरह से संगठनात्मक puropses के लिए करना चाहते हैं। निश्चित रूप से आप आवश्यक विधियों के साथ एक स्थिर छवि उपयोगिता वर्ग बना सकते हैं (जो, इस उत्तर के अनुसार उसे किसी भी तरह से करना होगा), लेकिन मुझे लगता है कि ओपी अपने कोड को इस तरह व्यवस्थित करना चाहेगा कि उसे अतिरिक्त कक्षा की आवश्यकता नहीं है । दुर्भाग्य से, आप नहीं कर सकते। (मैं यहाँ ऐसा करने के लिए आया था)। – MattW

उत्तर

6

नहीं, विस्तार विधियों का उपयोग केवल उदाहरण विधियों को जोड़ने के लिए किया जा सकता है, न कि स्थैतिक तरीकों (या यहां तक ​​कि गुण)। विस्तार विधियां वास्तव में स्थिर तरीकों के आस-पास सिंटैक्टिक चीनी हैं। उदाहरण के लिए, जब आप ऐसे गणना() के रूप में एक विस्तार विधि का उपयोग करें:

var list = GetList(); 
var size = list.Count(); 

यह वास्तव में करने के लिए संकलित किया गया है:

var list = GetList(); 
var size = Enumerable.Count(list); 

आप विस्तार तरीकों का उपयोग कर एक मौजूदा वर्ग के लिए अतिरिक्त स्थिर तरीकों को नहीं जोड़ सकते ।

+0

क्या यह कहना सही है कि "विस्तार विधियों का उपयोग केवल उदाहरण विधियों को जोड़ने के लिए किया जा सकता है"? जैसा कि आप समझाते हैं, वे केवल उदाहरण विधियों की उपस्थिति देते हैं। वे वास्तव में उदाहरण विधियां नहीं हैं, या आप कक्षा के गैर-सार्वजनिक सदस्यों तक पहुंच पाएंगे। –

0

नहीं, यह सी # में अभी तक संभव नहीं है, हालांकि उम्मीद है कि यह किसी बिंदु पर ऐसा हो जाएगा। और आप एक स्थैतिक वर्ग को उपclass नहीं कर सकते हैं और इस तरह से नई विधियों को जोड़ सकते हैं, क्योंकि स्थिर वर्ग object से प्राप्त होना चाहिए। एक चीज जो आप कर सकते हैं, जो आपके कोड में एक बहुत ही समान प्रभाव उत्पन्न करती है, बस एक और स्थैतिक वर्ग घोषित करती है जिसका उपयोग आप अपनी विस्तार विधियों के बजाय करेंगे। उदाहरण के लिए:

public static class MessageBox2 
{ 
    public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs) 
    { 
     return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

के बाद से मूल वर्ग स्थिर है, परिभाषा के द्वारा "विस्तार" विधि एक this पैरामीटर के रूप में एक उदाहरण प्राप्त करने की आवश्यकता नहीं है, और बस मूल वर्ग के स्थिर तरीकों का उपयोग कर सकते हैं।

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