Добрый день. необходимо разобраться с данным кодом в VB. Такой вопрос - что значит records(0,index) и что значит ByVal?
Private Sub FillQuestion(quest As Question, records As Variant, ByVal index As Integer)
With quest
.Count = records(0, index)
.AnswerType = records(1, index)
.Text = records(2, index)
End With
End Sub
Private Type Question
Count As Integer
AnswerType As Integer
Text As String
Answers(0 To 3) As String
AnswerCode As String
End Type
Другие языки программирования и технологии
records и ByVal в VB
ByVal это передача параметра по значению, а ByRef по ссылке.
ByVal приводит к тому, что для вводимой за ним переменной при вызове процедуры создаётся копия, которая исчезает по окончании работы процедуры и никак не может повлиять на значение переменной, для которой эта копия создаётся.
Для переменной ByRef (даётся по умолчанию) копия не создаётся. Значение переменной ByRef процедура может изменить, а значение переменной ByVal – нет.
Теперь по-русски. У тебя есть переменная index, которая определена где-то за пределами подпрограммы FillQuestion, и когда ты ее вызываешь из основной программы, ты пишешь: Call FillQuestion (quest, records, index)
Когда выполнение программы переходит к выполнению подпрограммы, оно встречает префикс ByVal index в заголовке.
При этом переменные quest и records задаются по умолчанию с префиксом ByRef, а index - с префиксом ByVal.
Это значит, что если переменная quest или records будет изменена внутри подпрограммы, то она так и останется измененной, когда выполнение вернется к основной программе, а переменная index при входе в подпрограмму копируется как-бы в другую переменную с тем же именем index, и с тем же старым значением, поэтому она может быть изменена сколько угодно, а при возврате в основную программу эта как-бы переменная стирается, и имя index возвращается к основной переменной и получает старое значение.
Теперь про records. Но здесь я уже менее уверен.
В заголовке подпрограммы FillQuestion (quest As Question, records As Variant, ByVal index As Integer)
ты задаешь переменную quest типа Question, который ты сам же и определил, переменную records типа Variant, то есть самонастраивающийся и переменную index типа Integer, то есть целое число.
Тип Variant означает то, что реальный тип переменной будет такой, какой ты задашь при первом обращении к переменной.
То есть, если ты напишешь records = 5, то records станет типа Integer, а если напишешь records = "Вася", то типа String.
Тип Question мы определяем самостоятельно как список переменных: Count типа целое, AnswerType типа целое, Text типа строка, Answers(0 To 3) - одномерный массив из 4 элементов типа строка, AnswerCode типа строка.
Records, как я понял - это массив, члены которого имеют разные типы.
В подпрограмме мы задаем, что Count - это число, равное значению records(0,index), AnswerType - это число, равное значению records(1,index), Text - это строка, равная значению records(2,index).
Вроде бы так.
ByVal приводит к тому, что для вводимой за ним переменной при вызове процедуры создаётся копия, которая исчезает по окончании работы процедуры и никак не может повлиять на значение переменной, для которой эта копия создаётся.
Для переменной ByRef (даётся по умолчанию) копия не создаётся. Значение переменной ByRef процедура может изменить, а значение переменной ByVal – нет.
Теперь по-русски. У тебя есть переменная index, которая определена где-то за пределами подпрограммы FillQuestion, и когда ты ее вызываешь из основной программы, ты пишешь: Call FillQuestion (quest, records, index)
Когда выполнение программы переходит к выполнению подпрограммы, оно встречает префикс ByVal index в заголовке.
При этом переменные quest и records задаются по умолчанию с префиксом ByRef, а index - с префиксом ByVal.
Это значит, что если переменная quest или records будет изменена внутри подпрограммы, то она так и останется измененной, когда выполнение вернется к основной программе, а переменная index при входе в подпрограмму копируется как-бы в другую переменную с тем же именем index, и с тем же старым значением, поэтому она может быть изменена сколько угодно, а при возврате в основную программу эта как-бы переменная стирается, и имя index возвращается к основной переменной и получает старое значение.
Теперь про records. Но здесь я уже менее уверен.
В заголовке подпрограммы FillQuestion (quest As Question, records As Variant, ByVal index As Integer)
ты задаешь переменную quest типа Question, который ты сам же и определил, переменную records типа Variant, то есть самонастраивающийся и переменную index типа Integer, то есть целое число.
Тип Variant означает то, что реальный тип переменной будет такой, какой ты задашь при первом обращении к переменной.
То есть, если ты напишешь records = 5, то records станет типа Integer, а если напишешь records = "Вася", то типа String.
Тип Question мы определяем самостоятельно как список переменных: Count типа целое, AnswerType типа целое, Text типа строка, Answers(0 To 3) - одномерный массив из 4 элементов типа строка, AnswerCode типа строка.
Records, как я понял - это массив, члены которого имеют разные типы.
В подпрограмме мы задаем, что Count - это число, равное значению records(0,index), AnswerType - это число, равное значению records(1,index), Text - это строка, равная значению records(2,index).
Вроде бы так.
Похожие вопросы
- VB. Макросы в MS Exel.
- А лучше качать VB 6 версии или сразу VB 2010? И воообще, в чем разница то?)))
- Вводится последовательность чисел, 0 – конец последовательности. Найти два наибольших числа (VB) прошу помощи
- Для чего в VB используются функции Rnd и Randomize?
- Visual basic Всем привет. Я знаю что на VB можно создать много чего. Вопрос такой. Что интересного вы создали на VB. ?
- Скажите изучать программирование на VBA - потеря времени? может просто VB или С++??
- как зашить в exe шник VB 6.0 файлы access или excel (чтобы компилировался только один файл)?
- Вопросы по VB.
- как округлить число полученое при решеии выражения до десятых в VB
- как заставить кнопку убегать от курсора в VB