2009-12-04 64 views
5

Hôm nay, trong khi nói chuyện với đồng nghiệp của tôi, điều gì đó kỳ quặc xuất hiện trong đầu anh.Hành vi đặc biệt của hành vi đặc biệt (lạ?)

Một "bí mật" cách để xử lý chuỗi đến từ vb6, mà là giống như:

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

này sẽ đặt i am hack bên strSomeString.

Trong khi ngạc nhiên về sự kỳ quặc như vậy được hỗ trợ trong vb6, tôi đã hoàn toàn bị thổi khi tôi đọc rằng it is supported in VB.Net too (có thể cho khả năng tương thích với mã cũ).

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" 

Câu hỏi của tôi là: về mặt kỹ thuật hoạt động như thế nào? Mid hoạt động như thế nào trong tình huống cụ thể đó? (Phương pháp chức năng phương pháp? Mở rộng?)

+0

Trong thời gian tôi làm VB6, tôi không bao giờ biết rằng điều này là xa càng tốt. Xin vui lòng cho tôi biết không có ai làm điều này trong .Net trên mục đích! –

+1

Không phải lo lắng. Làm như vậy sẽ cảnh báo Microsoft một cách không đồng bộ, điều này sẽ khiến những người xấu đánh bại crap từ thiên tài đã làm điều đó. –

Trả lời

8

Nó được dịch sang một cuộc gọi MSIL để chức năng này trong Microsoft.VisualBasic.CompilerServices.StringType

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

lừa trình biên dịch này là hoàn toàn tương thích ngược. Nó được xây dựng trong trình biên dịch, do đó, không phải là loại lừa bạn có thể thực hiện chính mình trên các loại của riêng bạn.

Vì vậy

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

trở thành

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

Hope this helps,

+0

Câu trả lời tuyệt vời, cảm ơn bạn. –

+0

@ Alex: Rất vui được giúp đỡ. –