Avatar billede deamill Nybegynder
19. maj 2007 - 20:46 Der er 7 kommentarer og
1 løsning

Pointere i VB.NET

Hejsa,

Hvordan arbejder jeg med pointere i VB.NET?

Jeg har forsøgt VarPtr osv. men det kender compileren åbenbart ikke.

Jeg skal bruge det til at opdatere variabler på tværs af forms. Jeg overfører de aktuelle variabler som ByRef.

F.eks.:

Public Sub New(ByRef paramStatusBar1Text As String)

End Sub

I ovenstående kan jeg så sige paramStatusBar1Text="Hej" og tekstfeltet bliver opdateret i den kaldende form, alt ok!

Men jeg kan f.eks. ikke gøre det her:

Dim ptrText as string

Public Sub New(ByRef paramStatusBar1Text As String)
  ptrText = paramStatusBar1Text
End Sub

Fordi så kommer ptrText bare til at indeholde en kopi af teksten i paramStatusBar1Text.

Hvordan gør jeg sådan at ptrText indeholder en pointer/reference tilbage til det oprindelige dataområde som paramStatusBar1Text peger på?

Håber det giver mening :-)

På forhånd tak!
Avatar billede arne_v Ekspert
19. maj 2007 - 21:11 #1
ptrText peger skam på den oprindelige string

men strings er immutable i .NET så du kan ikke ændre den oprindelige string

og der er ingen forskel på ByRef og ByVal i den kontekst

mit gæt vil være at du har brug for at overføre den første form ByVal til
metoden, så den kan sætte properties og kalde metoder på den første form
Avatar billede 0xffff Nybegynder
19. maj 2007 - 21:16 #2
ellers kan du jo overføre selve objektet. Istedet for at overføre værdien fra feltet, så overfør hele objektet.
Avatar billede deamill Nybegynder
20. maj 2007 - 18:58 #3
@0xffff
Kan man overføre en reference til objektet?
Avatar billede arne_v Ekspert
20. maj 2007 - 19:15 #4
det er hvad

Public Sub New(ByVal paramStatusBar1Text As String)

gør
Avatar billede 0xffff Nybegynder
20. maj 2007 - 21:35 #5
hmmm.. arne_v, der er vi vidst ikke enige :)

Så vidt jeg husker laver en egen kopi af objektet og byref er pointeren.

Men det jeg mente til deamill var at hvis du nu vil have en form til at opdatere tekstfeltet på en anden form så overfør hele objektet istedet for en string.

Public Sub New(objTesktFelt1 as Object)

Så har du ikke problemet med strings længere.
Avatar billede arne_v Ekspert
20. maj 2007 - 21:53 #6
String er en reference type ikke en value type.

Så byval laver en kopi af referencen ikke af objektet.
Avatar billede deamill Nybegynder
22. maj 2007 - 08:01 #7
@0xffff
Jeg løste det som du sagde, ved at overføre hele objektet i stedet for. Så svar lige :)
Avatar billede 0xffff Nybegynder
22. maj 2007 - 12:59 #8
super. rart at kunne hjælpe.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester