| |

VB.NET - Ein- und UmsteigerRe: [OOP]: Zwei Objekt, aber ein Wert? | |  | Autor: Preisser | Datum: 04.03.12 00:02 |
| Hallo,
normale Objekte sind ja referenzbasiert, d.h. man speichert immer nur eine Referenz auf ein Objekt, das irgendwo im Heap liegt (eigentlich müsste das aber in jedem OOP-Tutorial ganz am Anfang behandelt werden). Mit
o2 = o1 wird ja die Referenz auf ein Objekt, die in o1 abgelegt ist, in o2 kopiert, also zeigen sowohl o1 als auch o2 auf das selbe Objekt. Wenn du mit o1.Feld1 = 9 die Variable in dem Objekt änderst, auf das o1 zeigt, ist es natürlich klar, dass auch o2.Feld1 = 9 ist, da o1 und o2 ja auf das selbe Objekt zeigen.
Streamfighter schrieb:
Zitat: |  | Und wie müsste ich vorgehen, dass sich o2.Feld1 wie eine gewöhnliche Variable verhält und Ihren Wert beibehält. |  |
Wie meinst du das? Also wenn du einen Werttyp statt eines Referenztyps verwenden willst, müsstest du eine Structure verwenden.
Structure Struct1
...
End Structure In dem Fall würde bei der Deklaration
Dim myVar As Struct1 keine Referenz abgelegt werden, sondern die Datenstruktur direkt.
Allerdings sollte man das nur verwenden, wenn es erforderlich ist (z.B. aus Effizienzgründen), da damit beispielsweise keine Vererbung möglich ist (da ja im Voraus bekannt sein muss, wieviel Bytes die Datenstruktur belegt, während eine Referenz immer die gleiche Anzahl Bytes (4 bzw. 8) belegt und man damit auf unterschiedlich "große" Objekte verweisen kann).
Wenn du nur eine Kopie eines Objekts erstellen willst, kannst du auch die protected MemberwiseClone-Methode des Objekts aufzurufen. Z.B. bei
Class Klasse1
Public Feld1 As UShort
Sub New(ByVal f As UShort)
Me.Feld1 = f
End Sub
Public Function Clone() As Klasse1
Return DirectCast(Me.MemberwiseClone(), Klasse1)
End Function
End Class und dem Code
Private o1 As Klasse1 = New Klasse1(1)
Private o2 As Klasse1 = Nothing
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
o2 = o1.Clone()
o1.Feld1 = 9
MessageBox.Show("" & o2.Feld1)
End Sub würde o2.Feld1 weiterhin 1 sein, da dann eine flache Kopie des Objekts erstellt und die Referenz darauf in o2 abgelegt werden würde.
(Man sollte auch am besten auf Objektattribute immer per Properties zugreifen.)
Beitrag wurde zuletzt am 04.03.12 um 00:24:02 editiert. |  |
 [OOP]: Zwei Objekt, aber ein Wert? | 2.227 | Streamfighter | 03.03.12 23:51 |   Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.432 | Preisser | 04.03.12 00:02 |   Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.860 | Manfred X | 04.03.12 05:14 |   Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.383 | DaveS | 04.03.12 09:05 |    Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.440 | Streamfighter | 04.03.12 12:21 |   Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.421 | Streamfighter | 07.03.12 09:27 |    Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.376 | Micke | 07.03.12 09:57 |    Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.416 | DaveS | 07.03.12 10:24 |    Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.353 | Manfred X | 07.03.12 10:29 |     Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.428 | keco | 07.03.12 16:14 |      Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.401 | DaveS | 07.03.12 16:22 |       Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.368 | keco | 07.03.12 16:34 |      Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.377 | Manfred X | 07.03.12 17:16 |       Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.364 | keco | 07.03.12 17:35 |   Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.417 | DaveS | 07.03.12 11:06 |    Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.535 | DaveS | 07.03.12 11:18 |   Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.317 | Streamfighter | 07.03.12 15:21 |    Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.387 | Manfred X | 07.03.12 15:36 |    Re: [OOP]: Zwei Objekt, aber ein Wert? | 1.447 | DaveS | 07.03.12 15:42 |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|