GOGI> Ну ведь в For не оптимизирует. Хотя я вот этого не знал, думал что задавая именно такой цикл а не while ты указываешь, что границы нужно только вначале получить.
Такого смыла у for нет и быть не может т.к. VB не запрешает изменять как переменную цикла так и условие его окончания внутри тела цикла.
code text
Dim count As Integer = TestClass.testarray.GetUpperBound(0)
For i = 0 To count
TestArray1(i) = Rnd()
count = count - 1
Next
вполне законный кусок кода и поэтому если после To стоит вызов функции то она будет вызываться в каждой итерации. Кстати Сергей не совсем прав - такой For компилятор с большой вероятностью не соптимизирует даже если функция возвращает константу.
GOGI> TestArray = TestClass.TestArray создает ссылку на TestClass.TestArray а не новый массив? Как это вообще определяется?
Потому что в VB массив это объект типа Array, а объект передается по ссылке. Для создания массива сушествует укороченный синтаксис с круглыми скобками вместо создания его с помошью оператора new. Тоесть TestArray(size) As Type, если не в даваться в детали реализации, это укороченная запись для TestArray = New Array(Type, size). А если бы объект копировался, то код бы просто не работал, значения элементов массива TestArray в классе Test после прохода цикла оставался бы нулями.