В общем, я хочу сохранить ссылку на логическое значение в моем классе.
Это выглядит примерно так:
Public Class TestClass
Private boolRef As Boolean
Public Sub New(ByRef inBoolRef As Boolean)
boolRef = inBoolRef 'Assign reference of "inBoolRef" to "boolRef"
End Sub
Public Sub changeBool()
boolRef = true 'Change value of the referenced boolean variable (outside of this class)
End Sub
End Class
Объект этого класса работает в параллельном потоке, и поэтому я хочу, чтобы объект управлял переменной в своем собственном потоке. И моя программа делает это:
Module Program
Dim myBool As Boolean = false
Sub Main(args As String())
Dim tC As New TestClass(myBool)
'Opens a parallel thread in which the object does things
'and should change "myBool" to true when the object is terminated
End Sub
End Module
Чего я не понимаю, так это того, что я объявляю логическую переменную. Затем я хочу, чтобы другая переменная в моем классе сохранила ссылку на эту переменную (которая была введена в ctor). В boolRef = inBoolRef
я обрабатываю boolRef, как если бы это была реальная ссылка. Но в boolRef = true
в changeBool()
кажется, что это уже не ссылка.
Этот вопрос показывает мне, что это возможно в VB. Net и также работает, по крайней мере, с объектами. Но я не могу присвоить другие значения myBool
с помощью другого экземпляра объекта, который должен хранить ссылку на переменную. Я имею в виду, что теоретически я мог бы сделать что-то в классе, как
Public Sub changeBool()
boolRef.doSomethingLikeAssignAValue()
End Sub
, но это не сработает, потому что, насколько я знаю, Boolean
является примитивным типом данных, и поэтому не может быть изменено любым Sub
с.
Я из мира C (++) и нахожу его более интуитивным в том, как обрабатывать ссылки, указатели и т. д. c.
TL; DR:
Что я не хочу делать, так это в основном (в C (++)):
Class BoolChanger
{
Private:
bool *boolRef = nullptr;
Public:
inline BoolChanger(bool *inBoolRef)
{
boolRef = inBoolRef;
}
inline void change()
{
*boolRef = true; // Change value of pointed-to boolean variable
}
}
int main(int argc, char *argv[])
{
bool myBool = false;
// Open parallel thread in which the object runs an does its things
BoolChanger bc(&myBool);
// ... and when it's done, it should set myBool to "true"
return 0;
}
но в VB. Net. Пожалуйста, кто-нибудь может мне помочь? Кажется, мне не хватает чего-то, что важно знать ...