दिलचस्प पोस्ट
.NET में एक स्ट्रिंग के लिए मैं एक डिफ़ॉल्ट कन्स्ट्रक्टर को परिभाषित क्यों नहीं कर सकता? गिट के साथ एक नई शाखा में सबसे हालिया प्रतिबद्धताएं ले जाएं GOTO का उपयोग करें या नहीं? थंबनेल छवि बनाएं py2exe – एकल निष्पादन योग्य फ़ाइल उत्पन्न ऑब्जेक्ट का उपयोग करके समूह सरणी आइटम पायथन फ़ंक्शंस संदर्भ द्वारा कॉल करते हैं कैसे चेक किया जाए कि दिए गए सी ++ स्ट्रिंग या चार * केवल अंक हैं? क्या उद्देश्य-सी में -इन विधि निजी बनाने के लिए संभव है? आभासी असाइनमेंट ऑपरेटर C ++ आश्चर्यजनक है कि वैश्विक वैरिएबल को जावास्क्रिप्ट में मान अनिर्धारित है मैं सी # से पायथन स्क्रिप्ट कैसे चलाऊँ? आईओएस 10 पर स्टार्टअप के दौरान कॉर्डोवा ऐप फांसी __cmp__ के बजाय __lt__ JUnit: कैसे System.in परीक्षण अनुकरण करने के लिए?

हम एक स्थिर विधि में 'इस' कीवर्ड का उपयोग क्यों नहीं कर सकते?

class Sub { static int y; public static void foo() { this.y = 10; } } 

मैं समझता हूं कि this विधि को लागू करने वाले ऑब्जेक्ट का प्रतिनिधित्व करता है और यह स्थिर तरीके किसी भी वस्तु के लिए बाध्य नहीं हैं। लेकिन ऊपर वर्णित मामले में, चर y भी स्थिर है।

अगर हम क्लास ऑब्जेक्ट पर स्टैटिक मेथड लागू कर सकते हैं, तो हम स्टैटिक तरीके से कक्षा के स्थिर चर को सेट करने की अनुमति क्यों नहीं दे सकते।

इस अतिरिक्त बाधा का उद्देश्य क्या है?

Solutions Collecting From Web of "हम एक स्थिर विधि में 'इस' कीवर्ड का उपयोग क्यों नहीं कर सकते?"

क्योंकि this वस्तु उदाहरण को संदर्भित करता है एक स्थिर विधि के कॉल में कोई वस्तु उदाहरण नहीं है। लेकिन निश्चित रूप से आप अपने स्थैतिक फ़ील्ड (केवल स्थिर वाले!) तक पहुंच सकते हैं। महज प्रयोग करें

 class Sub { static int y; public static void foo() { y = 10; } } 

यदि आप यह सुनिश्चित करना चाहते हैं कि आप स्थिर फ़ील्ड y प्राप्त करें और एक ही नाम के साथ कुछ स्थानीय चर नहीं है, तो निर्दिष्ट करने के लिए क्लास का नाम लिखें:

 class Sub { static int y; public static void foo(int y) { Sub.y = y; } } 

this ऑब्जेक्ट Sub इस उदाहरण का जिक्र है जैसा कि विधि static , वहाँ Sub का एक उदाहरण नहीं है

मुख्य कारण है कि हम "इस" को स्थिर विधि संदर्भ में नहीं उपयोग कर सकते हैं: –

यह: – "यह" वर्तमान कक्षा ऑब्जेक्ट का मतलब है, इसलिए यह स्पष्ट है कि "यह" केवल एक बार तस्वीर में आ गया है, जब हम उस कक्षा के एक ऑब्जेक्ट को बनाने का इरादा रखते थे।

स्थिर विधि: – स्थिर विधि का उपयोग करने के लिए वस्तु बनाने की कोई आवश्यकता नहीं है। जिसका मतलब है "उदाहरण" या वस्तु निर्माण जावा नियम के अनुसार "स्थिर" के साथ कोई अर्थ नहीं है

तो विरोधाभास होगा, यदि हम दोनों एक साथ (स्थैतिक और इस) का उपयोग करते हैं यही कारण है कि हम स्थिर तरीके से "इस" का उपयोग नहीं कर सकते।

अपना कोड काम करने के लिए इसे इस प्रकार लिखें:

 class Sub { static int y; public static void foo() { Sub.y = 10; } } 

आप स्थिर तरीकों में स्थिर फ़ील्ड सेट कर सकते हैं, लेकिन आपको this पर स्थिर विधि में ऐक्सेस नहीं है क्योंकि this ऑब्जेक्ट के वर्तमान इंस्टेंस को दर्शाता है, और एक स्थिर विधि में आपके पास कोई इन्सान नहीं है।

इसका अर्थ है "यह" ऑब्जेक्ट लेकिन कोई नहीं है आपके मामले में आप @tibtof सुझाव के रूप में वर्ग नाम का उपयोग कर सकते हैं।

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

"यह" कीवर्ड केवल तभी लागू होता है जहां एक ऑब्जेक्ट का एक उदाहरण बनाया जाता है। और स्थिर विधि में कोई भी उदाहरण नहीं बनाया गया है क्योंकि स्थिर विधि वर्ग क्षेत्र से संबंधित है।