14. juni 2002 - 00:06Der 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?
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
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.
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
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.