Если выражение «with» является типом класса, выражение «With» эквивалентно созданию новой временной переменной этого типа, инициализированной выражением «With» и предшествующей каждому ведущему «.»с этой переменной.Однако, если это структурный тип, все будет сложнее.Рассмотрим код (очевидно, это не тот способ, которым обычно что-то пишут, но пишут так, как он есть:
With MyPoints(N) ' Array of Point
N=SomeNewValue
.X = MyPoints(N).X
.Y = MyPoints(N).Y
End With
Оператор «With» эффективно фиксирует ссылку на MyPoints (N). Даже еслиMyPoints заменены на какой-либо другой массив, или N изменяется, защелкивающаяся ссылка все равно будет указывать на тот же элемент того же массива, что и при выполнении оператора With.Если объявлена локальная переменная P типа Point и захвачены MyPoints(N), а затем записывать в PX и PY, записи будут попадать только в локальную копию P, а не обновлять массив. Чтобы достичь аналогичной семантики в C #, нужно будет либо использовать локальные переменные для хранения как MyPoints, так и N,или же поместите содержимое оператора With в анонимную функцию, которая имеет параметр ref типа Point. Чтобы избежать необходимости создавать замыкание во время выполнения, анонимная функция должна также принимать, вероятно, посредством ссылки, любые локальные переменные, которые она будетнужно из наружного объема.