Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 02.01.07 22:22
В VB.Net - есть все!
Главное понять, что вы хотите...
Enum?
Select Case?

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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 применяется для экономии памяти.
Зачем так сильно экономить в такой и так прожорливой платформе, мне непонятно.
Но можно. Хотя и тупо. Мо всё равно можно. Правда, тебе это не нужно, но ты почему-то не понимаешь этого.
  <Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Explicit, pack:=1)> _
  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





Если true тогда
    - количество детей
иначе
    - ничего

Ты, по ходу, не понимаешь, что в структуре всё равно будут определены все поля. И наличие детей as boolean - это для тебя, а не для компилятора.

Ответить

Номер ответа: 6
Автор ответа:
 RNB-X



Вопросов: 17
Ответов: 29
 Профиль | | #6 Добавлено: 03.01.07 20:17
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Explicit, pack:=1)> _
  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
Records with variant parts are complicated syntactically but deceptively simple semantically. The variant part of a record contains several variants which share the same space in memory. You can read or write to any field of any variant at any time; but if you write to a field in one variant and then to a field in another variant, you may be overwriting your own data. The tag, if there is one, functions as an extra field (of type ordinalType) in the non-variant part of the record.

For each record instance, the compiler allocates enough memory to hold all the fields in the largest variant. The optional tag and the constantLists (like Rectangle, Triangle, and so forth in the last example above) play no role in the way the compiler manages the fields; they are there only for the convenience of the programmer.

The second reason for variant parts is that they let you treat the same data as belonging to different types, even in cases where the compiler would not allow a typecast. For example, if you have a 64-bit Real as the first field in one variant and a 32-bit Integer as the first field in another, you can assign a value to the Real field and then read back the first 32 bits of it as the value of the Integer field (passing it, say, to a function that requires integer parameters).

Ответить

Номер ответа: 11
Автор ответа:
 Viper



ICQ: 249094859 

Вопросов: 0
Ответов: 310
 Профиль | | #11 Добавлено: 04.01.07 11:19
Автору стоит понять следующее:

1. В данном случае одно и то же место в памяти будет использоваться двумя полями.
2. Какое из двух полей будет использоваться конкретно, будет зависить от написанного тобой кода, т.е. например есть структура:

<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Explicit, pack:=1)> _
  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


И где-то в коде

If fooData.field1 Then
    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 байта.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам