Avatar billede Lasse Novice
14. juni 2002 - 00:06 Der er 8 kommentarer og
1 løsning

Gem reference

Jeg har et objekt. Ved kald af en klassekonstruktor overfoerer jeg referencen af dette objekt. Det er nu meningen at jeg i kontruktoren skal gemme denne reference, saaledes at klassen kan tilgaa referencen, hvilket egentlig er det den peger paa. Hvordan gemmer man en reference?

takker
Avatar billede birkis Nybegynder
14. juni 2002 - 00:24 #1
Gør man det ikke nogenlunde som i Java?

Altså hvis objektet er av typen PC, laver du bare en attributt f.eks.
private static PC minpc;  ?

Og i constructoren minpc = nypc; ?


Eller misforstår jeg spørgsmålet??
Avatar billede kichian Nybegynder
14. juni 2002 - 09:03 #2
I .NET (og Java) bliver klasser altid overført som en reference. Det er ikke som i C/C++, hvor referencer styres vha. pointere.
Avatar billede Lasse Novice
14. juni 2002 - 18:40 #3
hvordan goer man saa...
Avatar billede Lasse Novice
14. juni 2002 - 18:41 #4
i VB?

det er forresten ikke sandt kichian... man kan overfoere vha. ByVal(kopi) og ByRef

Det sidstnaevnte kan jeg dog ikke faa til at virke...
Avatar billede Lasse Novice
14. juni 2002 - 18:54 #5
tag dette eksempel:

Public Class Form1
    Inherits System.Windows.Forms.Form

    Private hashtest As New Hashtable()
    Private k As newone

#Region " Windows Form Designer generated code "
#End Region

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Not hashtest.Contains("teste") Then
            hashtest.Add("teste", "jep")
        End If
        k = New newone(hashtest)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        k.test()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        MsgBox(hashtest.Item("jubiii"))
    End Sub
End Class

Class newone
    Private hash As New Hashtable()

    Public Sub New(ByRef test As Hashtable)
        hash = test
    End Sub

    Public Sub test()
        MsgBox(hash.Item("teste"))
        hash.Add("knallert", "jubiii")
    End Sub

End Class

Jeg trykker foerst knap et, og adder et element(teste) til hashtest(en hash). hashtest overfoerer jeg via ref til en instans af newone(en klasse) og gemmer ref'en i instansen.

Jeg trykker nu knap to, og udskriver vaerdien af det added element i punkt 1 og bagefter adder jeg til hash et nyt element(knallert). Idet det er en ref, burde det ogsaa addes(egentlig bliver det kun added een gang, da det er en ref) til hashtest.

Idet jeg trykker paa knap 3, udskriver jeg vaerdien af det element i hashtemp der er added i punkt 2. Dette virker dog ikke, da det(element knallert) ikke findes. Saa det virker ikke
Avatar billede kichian Nybegynder
14. juni 2002 - 20:01 #6
Nu er VB.NET ikke mit stærkeste sprog. Men i C# hedder konstruktøren det samme som klassen. Ikke New. Det kan måske forklare hvorfor dit eksempel ikke virker.
Og ByRef er default. Defor behøver du ikke at angive dette.
Avatar billede Lasse Novice
15. juni 2002 - 02:22 #7
ja, nu laeste jeg lige det kode jeg havde postet igennem, og fandt fejlen der gjorde at det kommer til at virke:

ret

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        MsgBox(hashtest.Item("jubiii"))
    End Sub
End Class

til

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        MsgBox(hashtest.Item("knallert"))
    End Sub
End Class

takker kichian
Avatar billede Lasse Novice
19. juni 2002 - 23:48 #8
svarer du kichian... saa jeg kan afslutte spg.
Avatar billede kichian Nybegynder
26. juni 2002 - 10:32 #9
Det er mig
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