2010-01-06 6 views
8

HttpServerUtility में UrlEncode नामक एक सार्वजनिक फ़ंक्शन शामिल है। यह एक साझा समारोह नहीं है। HttpServer उपयोगिता में कोई सार्वजनिक निर्माता नहीं है।माइक्रोसॉफ्ट ने यह कैसे किया? (उनके .NET HttpServerUtility क्लास के बारे में एक ओओ प्रश्न)

ऐसा विफल रहता है:

Dim encodeMe As String = "a string to be encoded!" 
HttpServerUtility.UrlEncode(encodeMe) 'Bombs out 

यह काम करता है, और कैसे माइक्रोसॉफ्ट यह करने के लिए कहते हैं:

Dim instance As HttpServerUtility 
Dim encodeMe As String = "a string to be encoded!" 

instance.UrlEncode(encodeMe) 'Works! 

वे यह कैसे किया? आप एक कन्स्ट्रक्टर का उपयोग करके इसका एक उदाहरण तत्काल नहीं कर सकते हैं, फिर भी आप HttpServerUtility.UrlEncode का संदर्भ देकर UrlEncode तक नहीं पहुंच सकते हैं।

संपादित करें: जबकि मैंने पूरी तरह से बड़ी ओओ बहस में शामिल होने का आनंद लिया, मुझे विश्वास है कि समस्या दोषपूर्ण एमएसडीएन दस्तावेज है। रेखा "मंद उदाहरण के रूप में HttpServerUtility" को "मंद उदाहरण के रूप में HttpServerUtility = Context.Server" कोड जो मैंने शामिल किया है (जो एमएसडीएन दस्तावेज से है) वास्तव में काम नहीं करता है, और इसके बजाय एक शून्य संदर्भ अपवाद फेंकता है - जैसा कि आप ' डी उम्मीद है। धन्यवाद, जेसन!

+0

क्या साथ बम बाहर? "वस्तु का संदर्भ वस्तु की आवृत्ति अनुसार सेट नहीं. है"? – naivists

+2

ओओपी 101: स्थिर/वर्ग विधियां! = उदाहरण विधियां – leepowers

+1

आपको अपना दूसरा कोड कहां मिला, माइक्रोसॉफ्ट कहता है कि यह काम करता है - और: क्या आपने वास्तव में इसका परीक्षण किया? यह काम नहीं करता। –

उत्तर

17

क्या आप वाकई यह काम करते हैं?

Dim instance As HttpServerUtility 
Dim encodeMe As String = "a string to be encoded!" 
instance.UrlEncode(encodeMe) 'Works! 

यह आपको रनटाइम पर एक NullReferenceException दे देंगे (और संकलक कि instance को सौंपा नहीं किया जा रहा है तो आपको एक चेतावनी दे देंगे)। गंभीरता से, माइक्रोसॉफ्ट ने यहां कुछ भी नहीं किया। उपर्युक्त कोड विनाशकारी रूप से गलत है और रनटाइम पर मर जाएगा।

और तुम ऐसा नहीं कर सकते

Dim encodeMe As String = "a string to be encoded!" 
HttpServerUtility.UrlEncode(encodeMe) 'Bombs out 

क्योंकि इस UrlEncodeHttpServerUtility में एक Shared पद्धति के रूप में परिभाषित नहीं है।

आपको HttpServerUtility का एक गैर-शून्य उदाहरण चाहिए। HttpServerUtility उपयोग करने के लिए सही तरीके से इस तरह है:

Dim instance As HttpServerUtility = HttpContext.Server 
Dim s As String = "Hello, World!" 
Dim result As String = instance.UrlEncode(s) 

एक अन्य विकल्प सिर्फ HttpUtility उपयोग करने के लिए जिसके लिए वहाँ है एक Shared विधि HttpUtility.UrlEncode है:

Dim s As String = "Hello, World!" 
Dim result As String = HttpUtility.UrlEncode(s) 
+0

@divo काम नहीं करते हैं: फिर यह एमएसडीएन (पहली बार नहीं) पर गलत है। यह रनटाइम पर दुर्घटनाग्रस्त हो जाएगा। – jason

+6

HttpUtility.UrlEncode (encodeMe) इस बहस –

+0

@ जेसन पर अधिक समय और दर्द बचाएगा: मैंने विधि के एमएसडीएन के विवरण में देखा और कुछ भी गलत नहीं मिला - हालांकि डॉक्टर * बुरा * है। –

-4

इसमें एक स्थिर निजी निर्माता है जो इसे उपयोग करने की अनुमति देता है। निम्न लिंक देखें: Static Constructors

यदि आप देखना चाहते हैं कि उन्होंने प्रतिबिंबक डाउनलोड किया है और इसे खोल दिया है।

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

+0

हां, लेकिन मुद्दा यह है कि आपको इसे काम करने के लिए वास्तव में उदाहरण बनाने की ज़रूरत नहीं है, भले ही यह एक इंस्टेंस सदस्य है, साझा नहीं किया गया है। – naivists

+8

डोनाल्ड Knuth संख्या के प्यार के लिए। यह उत्तर गलत है और इसमें कोई अपवर्तक नहीं होना चाहिए। सिर्फ इसलिए कि एक स्थिर कन्स्ट्रक्टर आपको असाइन किए गए उदाहरणों पर विधियों का आह्वान करने की अनुमति नहीं देता है और रनटाइम अपवाद में नहीं चलता है। इस धागे में भ्रम का स्तर आश्चर्यजनक है। – jason

+0

जेसन ने क्या कहा। आप इस विधि को शून्य संदर्भ पर आवेदक कर सकते हैं। वह सामान्य रूप से NullReferenceException के साथ मर जाता है। –

2

उपयोग HttpUtility.UrlEncode() बजाय HttpServerUtility.UrlEncode()। HttpServerUtility पर संस्करण एक उदाहरण विधि है और साझा/स्थैतिक विधि नहीं है। इसका स्थैतिक कन्स्ट्रक्टर के साथ कुछ लेना देना नहीं है (एक स्थिर कन्स्ट्रक्टर को पहली बार कक्षा से एक स्थैतिक विधि कहा जाता है)

4

सबसे पहले, आपके द्वारा दिए गए कोड उदाहरणों में से कोई भी काम नहीं करेगा।

पहला उदाहरण काम नहीं करेगा क्योंकि UrlEncode एक उदाहरण विधि है, इसलिए आप इसे टाइप पर नहीं कह सकते हैं, यानी HttpServerUtility.UrlEncode (encodeMe)।

दूसरा उदाहरण काम नहीं करेगा क्योंकि चर निर्दिष्ट नहीं किया गया है।

इसमें स्थिर रचनाकारों के साथ कुछ लेना देना नहीं है और इस तरह के उत्तर देने वाले उत्तर भ्रामक हैं।

HttpServerUtility प्रकार को केवल System.Web असेंबली द्वारा आंतरिक रूप से प्रारंभ करने के लिए डिज़ाइन किया गया है। आप इसके अपने उदाहरण नहीं बना सकते हैं। आप HttpContext.Server (जो एक HttpServerUtility का उदाहरण देता है) का उपयोग कर वेब अनुप्रयोग में इसका एक उदाहरण एक्सेस कर सकते हैं।

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