Benutzer mit den meisten Antworten
Werte einer Objektvariablen einer anderen byval zuweisen?

Frage
-
Ich hab eine Class mit Werten., zB:
Public Class IPInfo Public description As String Public mac As String End Class
(Meine Class hat viel mehr variablen)
ich definiere nun zb:
Dim Var1 as new IPInfo
nun wird Var1 mit Werten gefüllt.
Dieser Code:Dim Var2 as new IPInfo var2=var1
verweist nun im heap auf die identischen Bereiche. Ändere ich was in Var2, so ändere ich Var1.
Es scheint kein var2=var1.copy oder so zu geben. Gibt es also eine Möglichkeit, mit einfachen Mitteln die Werte aus Var1 als byval in Var2 zu übertragen?
Gruß und Dank
TH
Antworten
-
Hallo,
Klassen werden durch eine einfache Zuweisung nie kopiert. Anders sieht es dagegen mit Strukturen aus. Diese verhalten sich teilweise anders als Klassen, können beispielsweise nicht vererbt werden. Zu gleich wird durch eine Zuweisung immer eine neue Kopie des Objekts angelegt.
Ob eine ordentliche, tiefe Kopie einer Klasse bleibt dir dagegen nichts anderes übrig als alle Eigenschaften (solltest du in .NET den öffentlichen Feldern vorziehen) zuzuweisen.
Man kann zwar per Reflection einiges davon automatisieren, für den produktiven Einsatz halte ich allerdings nichts davon. Einmal ist es relativ unsicher und weiterhin verbraucht es unnötig Leistung.Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Migration Sucks Sonntag, 10. Januar 2016 19:59
-
Hi,
generell kannst Du dir natürlich eine Methode wie bspw. Clone, Copy, ... schreiben.
Public Class IPInfo ... Public Function Clone() As IPInfo Dim Result As New IPInfo() Result.description = Me.description Result.mac = Me.mac Return Result End Function End Class
Der Aufruf wäre dann bspw. wie folgt:
Dim Var2 As IPInfo = Var1.Clone()
Bei komplexeren Klassen ist das aber teils nicht mit vertretbarem Aufwand möglich. Daher erledige ich das in der Regel über Serialisierung/Deserialisierung. Ob nun XML oder binär, hängt von den Anforderungen ab.
Ich hab vor einiger Zeit mal ein Beispiel erstellt und hier gepostet:
Evtl. hilft dir das ja.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Migration Sucks Sonntag, 10. Januar 2016 20:02
Alle Antworten
-
Hallo,
Klassen werden durch eine einfache Zuweisung nie kopiert. Anders sieht es dagegen mit Strukturen aus. Diese verhalten sich teilweise anders als Klassen, können beispielsweise nicht vererbt werden. Zu gleich wird durch eine Zuweisung immer eine neue Kopie des Objekts angelegt.
Ob eine ordentliche, tiefe Kopie einer Klasse bleibt dir dagegen nichts anderes übrig als alle Eigenschaften (solltest du in .NET den öffentlichen Feldern vorziehen) zuzuweisen.
Man kann zwar per Reflection einiges davon automatisieren, für den produktiven Einsatz halte ich allerdings nichts davon. Einmal ist es relativ unsicher und weiterhin verbraucht es unnötig Leistung.Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Migration Sucks Sonntag, 10. Januar 2016 19:59
-
Hi,
generell kannst Du dir natürlich eine Methode wie bspw. Clone, Copy, ... schreiben.
Public Class IPInfo ... Public Function Clone() As IPInfo Dim Result As New IPInfo() Result.description = Me.description Result.mac = Me.mac Return Result End Function End Class
Der Aufruf wäre dann bspw. wie folgt:
Dim Var2 As IPInfo = Var1.Clone()
Bei komplexeren Klassen ist das aber teils nicht mit vertretbarem Aufwand möglich. Daher erledige ich das in der Regel über Serialisierung/Deserialisierung. Ob nun XML oder binär, hängt von den Anforderungen ab.
Ich hab vor einiger Zeit mal ein Beispiel erstellt und hier gepostet:
Evtl. hilft dir das ja.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Migration Sucks Sonntag, 10. Januar 2016 20:02
-
Bei komplexeren Klassen ist das aber teils nicht mit vertretbarem Aufwand möglich. Daher erledige ich das in der Regel über Serialisierung/Deserialisierung. Ob nun XML oder binär, hängt von den Anforderungen ab.
Vielen Dank Stefan,
Das hab ich mir angesehen. Ist mir aber zu hoch. Bin nur so hobbymäßig dran. Sieht tricky aus aber ich versteh es nicht. Musst mir das nicht erklären. Für meine Anforderungen mach ich das mit so einer .Clone-Version, wie Du schriebst.
TH