Страница: 1 |
Страница: 1 |
Вопрос: записи с вариантами на VB .NET
Добавлено: 02.01.07 21:37
Автор вопроса: RNB-X
Вопрос следующий существуют ли на ВБ .NET записи с вариантами наподобе Паскалевских с case'ом. Если да то как оформляются?
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
RNB-X
Вопросов: 17
Ответов: 29
Профиль | | #1
Добавлено: 02.01.07 21:42
Для примера запись анкета
-имя as string
-фамилия as string
-наличие детей as boolean
Если true тогда
- количество детей
иначе
- ничего
______________________________
тоесть название и количество полей зависит от значения предыдущих полей. В стареньком досовском паскале такая возможность есть! А в навороченом ВБ???
Номер ответа: 2
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #2
Добавлено: 02.01.07 22:22
В VB.Net - есть все!
Главное понять, что вы хотите...
Enum?
Select Case?
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 02.01.07 23:02
Select Case аналог паскакального case of
Номер ответа: 4
Автор ответа:
RNB-X
Вопросов: 17
Ответов: 29
Профиль | | #4
Добавлено: 03.01.07 17:17
то, что select case аналогично case of есно и так. Вопрос можно ли его использовать при описании пользовательского типа как в примере (пост 1). ну скажем в конструкции
Structure name
поле1 as тип
select case поле1
case 1: поле 2 as тип
case 2: поле 3 as тип
end select
end structure
примерно так можно???
Номер ответа: 5
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #5
Добавлено: 03.01.07 18:54
Union применяется для экономии памяти.
Зачем так сильно экономить в такой и так прожорливой платформе, мне непонятно.
Но можно. Хотя и тупо. Мо всё равно можно. Правда, тебе это не нужно, но ты почему-то не понимаешь этого.
Private Structure foo
<Runtime.InteropServices.FieldOffset(0)> Public field1 As Integer
<Runtime.InteropServices.FieldOffset(4)> Public field2 As Integer
<Runtime.InteropServices.FieldOffset(4)> Public field3 As Long
End Structure
- количество детей
иначе
- ничего
Ты, по ходу, не понимаешь, что в структуре всё равно будут определены все поля. И наличие детей as boolean - это для тебя, а не для компилятора.
Номер ответа: 6
Автор ответа:
RNB-X
Вопросов: 17
Ответов: 29
Профиль | | #6
Добавлено: 03.01.07 20:17
Private Structure foo
<Runtime.InteropServices.FieldOffset(0)> Public field1 As Integer
<Runtime.InteropServices.FieldOffset(4)> Public field2 As Integer
<Runtime.InteropServices.FieldOffset(4)> Public field3 As Long
End Structure
Я чё-то не понял что это значит. Что делает этот код????
Номер ответа: 7
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #7
Добавлено: 03.01.07 20:22
Определяет структуру, в которой несколько элементов делят одно и то же место. Ты именно это просил (хотя, похоже, не понимаешь сам этого).
Только тебе оно не надо (хотя ты тоже этого вроде как не понимаешь).
Номер ответа: 8
Автор ответа:
RNB-X
Вопросов: 17
Ответов: 29
Профиль | | #8
Добавлено: 03.01.07 20:53
я вот только не понимаю зачем нужно 2 полям ссылатся на одно и тоже место в памяти, причём независимо от условия)
Номер ответа: 9
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #9
Добавлено: 03.01.07 21:17
А ты не понимаешь, что в приведённом тобой паскальном случае происходит именно это?
Номер ответа: 10
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #10
Добавлено: 03.01.07 21:23
Object Pascal Language Guide
Номер ответа: 11
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #11
Добавлено: 04.01.07 11:19
Автору стоит понять следующее:
1. В данном случае одно и то же место в памяти будет использоваться двумя полями.
2. Какое из двух полей будет использоваться конкретно, будет зависить от написанного тобой кода, т.е. например есть структура:
Private Structure foo
<Runtime.InteropServices.FieldOffset(0)> Public field1 As Boolean
<Runtime.InteropServices.FieldOffset(2)> Public field2 As Integer
<Runtime.InteropServices.FieldOffset(4)> Public field3 As Single
End Structure
И где-то в коде
fooData.field2 = 1024
Else
fooData.field3 = 3.14
End If
Что-то вроде этого тебе и нужно. Естественно условие может содержаться не только в структуре, но и где угодно в другом месте.
Номер ответа: 12
Автор ответа:
RNB-X
Вопросов: 17
Ответов: 29
Профиль | | #12
Добавлено: 04.01.07 12:46
Спасибо. а насчёт того нужно это вообще или нет большой вопрос. Ведь если в записи будет вариативным полем динамическая величена (строка либо массив динамический) то место всё же экономить выйдет!
Номер ответа: 13
Автор ответа:
RNB-X
Вопросов: 17
Ответов: 29
Профиль | | #13
Добавлено: 04.01.07 12:59
как разместить условие внутри описания структуры так, чтобы значения присваивались автоматически?
Номер ответа: 14
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #14
Добавлено: 04.01.07 15:30
Я понял: ты не умеешь читать, а постить вопросы на форум просишь друга, который читать умеет.
Друг, прочитай и передай ему на словах: память всегда отводится целиком, так, словно объявлена и задействована наибольшая часть вариативного поля, вне зависимости ни от чего.
И ещё передай: и строка, и динамический массив - указатели размеров в 4 байта. Поэтому вне зависимости от того, что они содержат, в структуре они займут 4 байта.