Hi,
hmm,..Also so ganz sicher bin ich mir ja auch nicht. Ich kenns noch von VB
oder C++. Es hat sich ja mit .net einiges ge�ndert (kann also hier und da
anders sein - Grunds�tzlich sollte ich aber nicht sooo daneben liegen). Ich
will's nur mal dazugesagt haben ;)
Wenn Du in .net ein Objekt hast (egal welches), dann ist es eigentlich immer
eine Referenz(Pointer) auf ein Objekt.
Daher muss der Compiler wissen, was sich an der besagten Stelle befindet.
Die Stelle selbst gibt keine Auskunft mehr dar�ber(es k�nnte ja sonst was an
dieser Stelle im Speicher sein, eine eMail, irgendwelcher Quatsch, ein durch
Fehler verursachter M�llberg)
Deswegen braucht ein Objekt zum Weitergeben auch nur 4 Bytes(Integer ist
Maschinenspezifisch. Bei 64bit-Systemen w�ren das 8Byte, fr�her waren es 2),
da nur dieser Offsetwert kopiert werden muss. Das Objekt selbst belegt im
Speicher an der Stelle x aber wieder eine bestimmte Gr��e.
Deswegen ist an der Stelle, auf die a verweist nachdem a=b gesetzt wurde
immer noch ein String vorhanden - nur keiner wei� es mehr ;)
Aus diesem Grund ist es grunds�tzlich auch gar nicht falsch z.B. noch
folgende Zeile einzuf�gen:
Dim x as Graphics = DirectCast(a, Graphics)
An der Stelle auf die a verweist k�nnte ja ein Graphics-Objekt liegen. Tut's
aber nicht, weil da schon ein String ist - deswegen bekommst Du mit der
Zeile w�hrend der Ausf�hrung auch eine Exception.
In (eher seltenen) Ausnahmen funktioniert die Zeile aber (ob unter .net das
immer noch so ist, ist mir eigentlich unbekannt. Ich denk aber schon), denn
es k�nnte durch Zufall(oder gewollt) eine doch kompatible(in Gr��e und
Inhalt) Struktur an der Speicherstelle stehen und damit w�rde keine
Exception ausgel�st werden.
Damit so was funktionieren kann (wenn's definitiv gewollt ist) gibt es
Interfaces und Vererbung.
Man braucht heut wirklich nicht mehr wissen, was sich an Speicherstelle xyz
befindet - das �bernimmt der Compiler, Du arbeitest "nur" noch mit Objekten.
Zum Verst�ndnis (und weil man ja nicht dumm sterben will) ist es aber
bestimmt auch nicht falsch. Nur zu sehr ins Detail w�rd ich nicht abwandern.
Um die Antwort mit einem Beispiel noch abzurunden: (Hier ist String wahrlich
ungeeignet, da es doch eine Ausnahmerolle einnimmt)
Public Class test
Public x As Integer
End Class
Public Class test2
Public Sub test()
Dim a As Object
Dim b As New test
b.x = 12
a = b
CType(a, test).x = 13
MessageBox.Show(b.x.ToString)
End Sub
End Class
Das kann nur funktionieren, weil a eine Referenz auf die Stelle im Speicher
ist, an der ein test-Objekt liegt. a=b kopiert nur eine einzige
Integer-Zahl.
"Object" und "test" sind nur Hilfskonstrukte f�r Dich als Programmierer und
auch nur vor der (endg�ltigen) Compilierung wichtig.
Du kannst weniger Fehler machen, da Du an der Stelle 123 kein
Graphics-Objekt ansprechen kannst welches da auch gar nicht liegt weil da
schon ein "test" ist, Du kannst Dir auch alles um einiges besser vorstellen
und nachvollziehen als mit endlosen Zahlenkolonnen.
Je mehr Hilfe Du aber vom Compiler bekommst (und Referenzen(statt direkter
Zugriff Pointer) sowie die gesamte Objektorientierung sind genau diese Art
von Caritas-Veranstaltungen), desto weniger kannst Du auch in den gesamten
Prozess eingreifen und "Dummheiten" anstellen (manchmal auch zum eigenen
Leidwesen).
Der Speicher wei� nix von irgendwelchen Objekten oder dergleichen. Was Du
definierst ist also eigentlich Wurscht, solange nicht K�se dabei rauskommt
;)
Viele Gr��e,
Dubius sum .. Wolfgang
http://www.vbwelt.de/
> -----Urspr�ngliche Nachricht-----
> Von: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Im Auftrag von Oskar Vaia
> Gesendet: Freitag, 19. Dezember 2003 12:10
> An: [EMAIL PROTECTED]
> Betreff: AW: [Vb.net] Basis- und Subklasse
>
> Hallo Wolfgang,
>
> vielen Dank f�r die Erkl�rung (auch des Tierreiches! :) )
>
> >So. Nun ist an Stelle a immer noch ein String, nur der Compiler wei�
> >nichts mehr davon. Im Speicher liegt nur eine Adresse, die
> wiederum auf
> >ein Objekt irgendwo anders im Speicher verweist (und letzteres kann
> >beliebig gro� und von beliebiger Natur sein).
>
> wieso 'an Stelle von "a" IMMER NOCH ein String ...'? "a"
> wurde ja urspr�nglich als Object deklariert. Meintest du hier
> vielleicht das Object-Objekt?
>
> Gr��e
>
> Oskar
_______________________________________________
Vb.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/vb.net