2009-12-04 10 views
5

आज, मेरे सहयोगी के साथ बात करते समय, उनके दिमाग से कुछ अजीब बात आई।वीबीनेट मिड बाएं ऑपरेटर विशेष (अजीब?) व्यवहार

एक "गुप्त" जिस तरह से स्ट्रिंग VB6 से आ रही है, जो की तरह था संभालने के लिए:

Dim strSomeString as String 
strSomeString = "i am phat" 
Mid$(strSomeString, 6,4) = "hack" 

यह strSomeString अंदर i am hack जाते थे।

vb6 में समर्थित इस तरह की विषमता से हैरान होने पर, जब मैं it is supported in VB.Net too (संभवतः पुराने कोड के साथ संगतता के लिए) पढ़ता हूं तो मुझे पूरी तरह से उड़ा दिया गया था।

Dim TestString As String 
' Initializes string. 
TestString = "The dog jumps" 
' Returns "The fox jumps". 
Mid(TestString, 5, 3) = "fox" 
' Returns "The cow jumps". 
Mid(TestString, 5) = "cow" 
' Returns "The cow jumpe". 
Mid(TestString, 5) = "cow jumped over" 
' Returns "The duc jumpe". 
Mid(TestString, 5, 3) = "duck" 

मेरा प्रश्न है: यह तकनीकी रूप से कैसे काम कर रहा है? Mid क्या है जो उस विशेष परिस्थिति में काम कर रहा है? (विधि? समारोह? विस्तार विधि?)

+0

मेरा समय VB6 करने में, मैं कभी नहीं जानता था कि यह दूर से संभव हो गया था बन जाता है। कृपया मुझे बताएं कि कोई भी ऐसा नहीं कर रहा है। उद्देश्य पर! –

+1

कोई चिंता नहीं। ऐसा करने से माइक्रोसॉफ्ट को अतुल्यकालिक रूप से चेतावनी दी जाएगी, जो बुरे लोगों को उस प्रतिभा से बाहर बकवास मार देगा जो ऐसा करता है। –

उत्तर

8

यह Microsoft.VisualBasic.CompilerServices.StringType

Public Shared Sub MidStmtStr (_ 
    ByRef sDest As String, _ 
    StartPosition As Integer, _ 
    MaxInsertLength As Integer, _ 
    sInsert As String _ 
) 

में इस समारोह के लिए एक MSIL कॉल करने के लिए अनुवाद हो जाता है यह संकलक चाल पश्च संगतता के लिए विशुद्ध रूप से है। यह कंपाइलर में बनाया गया है, इसलिए ऐसी कोई चाल नहीं है जिसे आप स्वयं अपने प्रकार पर लागू कर सकते हैं।

तो

Mid(TestString, 5, 3) = "fox" 

MidStmtStr(TestString, 5, 3, "fox") 

आशा इस मदद करता है,

+0

अद्भुत जवाब, धन्यवाद। –

+0

@Alex: मदद साथी होने के लिए खुशी हुई। –

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