Есть ли в блоке With ‹obj› / End With ключевое слово для прямого доступа к ‹obj›?

В VB.NET просто интересно, есть ли что-то вроде ключевого слова this, с помощью которого можно получить доступ к объекту, используемому в блоке With <obj> ... End With. Например:

With myObj
  .thisMethod()
  someFunction(<this>) ' Where "<this>" refers to myObj
  .thatMethod()
End With

Было бы просто удобно, если бы это было возможно, в тех случаях, когда вы хотите передать myObj, не выходя из блока With.


person ingredient_15939    schedule 23.04.2013    source источник
comment
Почему нельзя просто использовать имя объекта так: someFunction(myObj)?   -  person Chris Dunaway    schedule 23.04.2013


Ответы (2)


Вы не можете сделать это напрямую, нет. Единственный способ, которым я могу это сделать, - это расширить ваш объект, включив в него ссылку на себя как на свойство readonly:

Public Class TextBoxExtended
    Inherits TextBox
    Public ReadOnly Property ObjRef As TextBox
        Get
            Return Me
        End Get
    End Property
End Class

Затем вы можете сделать это в своем блоке с помощью:

With myObj
  .thisMethod()
  someFunction(.ObjRef)
  .thatMethod()
End With

Однако я должен спросить, зачем вам это нужно.

person Matt Wilko    schedule 23.04.2013
comment
Спасибо, это хорошее решение. Причина на самом деле просто удобство и любопытство. Точно так же, как Me полезен внутри класса, ссылка на объект With может быть полезна внутри длинного блока With. - person ingredient_15939; 04.05.2013

Я не совсем понимаю тебя. Почему вы можете ссылаться на объект?

Например, если это текстовое поле.

With textbox1
.visible = true
.text = textbox1.text
End with

Это все равно сработает.

на самом деле это тоже сработает.

.text = .text

Может быть, не самый лучший, потому что вы никогда не увидите изменений ...

Попробуем еще раз ...

' The function to send to.
Function myfunction(thestring As String) As String
    thestring += "moretext"
    Return thestring
End Function

' The with statement
With Textbox1
.Text = myfunction(.Text)
End With

Текст текстового поля изменится на исходный текст + «moretext».

person Michael Parr    schedule 23.04.2013
comment
Извините, если я не понял, но я хочу сослаться на объект used в строке With. Это может быть длинная строка, которая соответствует объекту, который я бы не хотел повторять в блоке With. Ваш пример .Text = myfunction(.Text) - это не то, что мне нужно. Он должен читать .Text = myfunction(Textbox1). Но мне любопытно, могу ли я ссылаться на объект Textbox1 с помощью ключевого слова, а не самого имени переменной - если это возможно. - person ingredient_15939; 23.04.2013
comment
Например, есть ли ключевое слово для объекта, который вы используете? Как textbox1 упоминается так же, как и сформированный объект, на который я ссылаюсь.? Я не думаю, что есть, и не могу придумать, как это было бы полезно. Ваш пример .text = myfunction (Textbox1) не будет работать, потому что texbox1 не является функцией. Но если у него было какое-то действие, оно должно сработать. В этом случае я не понимаю, насколько будет труднее сослаться на textbox1, чем на ключевое слово. - person Michael Parr; 23.04.2013