vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: [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.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
[OOP]: Zwei Objekt, aber ein Wert?2.227Streamfighter03.03.12 23:51
Re: [OOP]: Zwei Objekt, aber ein Wert?1.432Preisser04.03.12 00:02
Re: [OOP]: Zwei Objekt, aber ein Wert?1.860Manfred X04.03.12 05:14
Re: [OOP]: Zwei Objekt, aber ein Wert?1.383ModeratorDaveS04.03.12 09:05
Re: [OOP]: Zwei Objekt, aber ein Wert?1.440Streamfighter04.03.12 12:21
Re: [OOP]: Zwei Objekt, aber ein Wert?1.421Streamfighter07.03.12 09:27
Re: [OOP]: Zwei Objekt, aber ein Wert?1.376Micke07.03.12 09:57
Re: [OOP]: Zwei Objekt, aber ein Wert?1.416ModeratorDaveS07.03.12 10:24
Re: [OOP]: Zwei Objekt, aber ein Wert?1.353Manfred X07.03.12 10:29
Re: [OOP]: Zwei Objekt, aber ein Wert?1.428keco07.03.12 16:14
Re: [OOP]: Zwei Objekt, aber ein Wert?1.401ModeratorDaveS07.03.12 16:22
Re: [OOP]: Zwei Objekt, aber ein Wert?1.368keco07.03.12 16:34
Re: [OOP]: Zwei Objekt, aber ein Wert?1.377Manfred X07.03.12 17:16
Re: [OOP]: Zwei Objekt, aber ein Wert?1.364keco07.03.12 17:35
Re: [OOP]: Zwei Objekt, aber ein Wert?1.417ModeratorDaveS07.03.12 11:06
Re: [OOP]: Zwei Objekt, aber ein Wert?1.535ModeratorDaveS07.03.12 11:18
Re: [OOP]: Zwei Objekt, aber ein Wert?1.317Streamfighter07.03.12 15:21
Re: [OOP]: Zwei Objekt, aber ein Wert?1.387Manfred X07.03.12 15:36
Re: [OOP]: Zwei Objekt, aber ein Wert?1.447ModeratorDaveS07.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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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