Оператор ReDim

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Оператор ReDim

Сообщение ANDLL » 03.12.2006 (Вс) 22:28

Оператор ReDim ведет себя в том числе и как Dim.
Например такой код:
Код: Выделить всё
Option Explicit

Private Sub Form_Load()
    ReDim A(0) As String
End Sub
Будет корректен по мнению компилятора, несмотря на Option Explicit.
И кроме того есть еще непонятный эффект.
Такой код:
Код: Выделить всё
Option Explicit
Dim A As Form

Private Sub Form_Load()
    ReDim A(0) As String
    MsgBox TypeName(A(0))
End Sub

Вызывает ошибку компиляции. А вот такой:
Код: Выделить всё
Option Explicit
Dim WithEvents A As Form

Private Sub Form_Load()
    ReDim A(0) As String
    MsgBox TypeName(A(0))
End Sub
Ошибки не вызывает :)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Оператор ReDim

Сообщение tyomitch » 03.12.2006 (Вс) 22:39

ANDLL писал(а):Оператор ReDim ведет себя в том числе и как Dim.
Например такой код:
Код: Выделить всё
Option Explicit

Private Sub Form_Load()
    ReDim A(0) As String
End Sub
Будет корректен по мнению компилятора, несмотря на Option Explicit.

Документировано:
MSDN писал(а):The ReDim statement acts as a declarative statement if the variable it declares doesn't exist at module level or procedure level. If another variable with the same name is created later, even in a wider scope, ReDim will refer to the later variable and won't necessarily cause a compilation error, even if Option Explicit is in effect. To avoid such conflicts, ReDim should not be used as a declarative statement, but simply for redimensioning arrays.


ANDLL писал(а):И кроме того есть еще непонятный эффект.

А вот это уже любопытнее :-)
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 04.12.2006 (Пн) 0:00

Притом, если сделать
Код: Выделить всё
Option Explicit
Private WithEvents A As VB.App

Private Sub Form_Load()
    ReDim A(0) As VB.App
    MsgBox TypeName(A(0))
End Sub

объектная переменная будет пустой:
MSDN писал(а):Nothing - Object variable that doesn't refer to an object

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 06.12.2006 (Ср) 1:56

Amed
Ну вроде всё правильно. Объект же должен создаться! :) Вроде) Если не прав - объясните пожалуйста)
#define ROFL 0xDDDD


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 113

    TopList