2010-03-07 9 views
6

जब मैं फ़ाइल क्लास के लिए एक एक्सटेंशन विधि बनाने का प्रयास करता हूं, तो मुझे यह बताते हुए एक त्रुटि मिलती है कि मैं ऐसा नहीं कर सकता क्योंकि कक्षा स्थिर है। हालांकि, मुझे नहीं लगता कि यह एक विस्तार विधि के निर्माण को क्यों रोकता है, वहां क्या प्रभाव है?मैं स्थिर कक्षाओं के लिए विस्तार विधियां क्यों नहीं बना सकता?

धन्यवाद

उत्तर

8

एक्सटेंशन तरीकों एक वस्तु का एक उदाहरण पर कहा जाता है।

myObj.ExtensionMethod(); 

यदि आपके पास स्थिर वर्ग है, तो आपके पास इसका कोई उदाहरण नहीं हो सकता है। इसलिए, विस्तार विधि को कॉल करने के लिए कुछ भी नहीं है।

+0

उत्तर के लिए धन्यवाद। यह शर्म की बात है लेकिन एक बड़ा नुकसान नहीं है। – dotnetdev

5

क्योंकि डिज़ाइन द्वारा extension method क्लास का एक उदाहरण लेना चाहिए जो इसे अपने पहले पैरामीटर के रूप में विस्तारित कर रहा है। और जाहिर है आप फ़ाइल का एक उदाहरण पास नहीं कर सकते क्योंकि यह एक स्थिर वर्ग है और इसमें उदाहरण नहीं हो सकते हैं।

5

यदि आप definition of any extension method पर देखते हैं, तो पहले पैरामीटर हमेशा उस ऑब्जेक्ट का उदाहरण होता है जिस पर इसे this कीवर्ड द्वारा प्रमाणित कहा जाता है। तर्कसंगत रूप से यह व्यवहार स्थैतिक वर्ग पर काम नहीं कर सकता क्योंकि कोई उदाहरण मौजूद नहीं है।

एक विस्तार विधि का नमूना - इस

public static class MyExtensions 
{ 
    public static int WordCount(this String str) 
    { 
     return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; 
    } 
} 
0

मैं स्थिर कक्षाओं के लिए विस्तार तरीकों क्यों नहीं बना पा पहले परम देखते हैं?

क्योंकि सी # देव टीम ने उस सुविधा को अभी तक लागू नहीं किया है (अभी तक)। हालांकि F# has chosen to implement it हालांकि।

विस्तार गुणों के लिए समान चीज़। एफ # में उन्हें और Boo has had them since (at least) 2006 है।