Hey,
ich bin grad dabei das Entwicklerbuch Microsoft Visual Basic 2010 durchzuarbeiten und habe auch in der 2008er Version diesen Hinweis gefunden (2010-Seite 448, 2008-Seite 529):
Ich dachte das ist genau anders rum, also mit ByVal wäre das nicht der Fall, so ist es auch in meinem Beispiel sofern ichs richtig gemacht hab:
Spoiler anzeigen
Ergebnis:
Kann mir da jemand sagen wo mein Denkfehler liegt, oder ists doch im Buch falsch?
ich bin grad dabei das Entwicklerbuch Microsoft Visual Basic 2010 durchzuarbeiten und habe auch in der 2008er Version diesen Hinweis gefunden (2010-Seite 448, 2008-Seite 529):
ByVal und ByRef haben für die Übergabe von Parametern, bei denen es sich um Referenztypen handelt, übrigens auch aus Auswirkungen ... beim Neuzuweisen von Objektvariablen.
Wenn Sie eine Objektvariable, also eine Referenz, mit Byval übergeben und innerhalb dieser Prozedur der Objektvariablen eine neue Instanz zuweisen, dann ändert sich auch die Instanz, auf die die Objektvariable in der aufrufenden Prozedur zeigt. Mit ByRef ist das nicht der Fall.
Ich dachte das ist genau anders rum, also mit ByVal wäre das nicht der Fall, so ist es auch in meinem Beispiel sofern ichs richtig gemacht hab:
VB.NET-Quellcode
- Module Module1
- Sub Main()
- Dim haselnuss As pflanze
- haselnuss = New baum(150)
- Console.WriteLine("Die Pflanze ist so groß: " & haselnuss.Höhe.ToString & " - " & haselnuss.Art)
- Console.WriteLine("--- Funktionsaufruf ByVal---")
- val(haselnuss)
- Console.WriteLine("Die Pflanze ist so groß: " & haselnuss.Höhe.ToString & " - " & haselnuss.Art)
- Console.WriteLine("--- Funktionsaufruf ByRef---")
- ref(haselnuss)
- Console.WriteLine("Die Pflanze ist so groß: " & haselnuss.Höhe.ToString & " - " & haselnuss.Art)
- Console.ReadKey()
- End Sub
- Public Sub val(ByVal _pflanze As pflanze)
- _pflanze = New strauch(50)
- End Sub
- Public Sub ref(ByRef _pflanze As pflanze)
- _pflanze = New strauch(50)
- End Sub
- End Module
- Public MustInherit Class pflanze
- Public Property Höhe() As Integer
- Public Property Art() As String
- End Class
- Public Class baum
- Inherits pflanze
- Public Sub New(ByVal Pflanzenhöhe As Integer)
- Höhe = Pflanzenhöhe
- Art = "Baum"
- End Sub
- End Class
- Public Class strauch
- Inherits pflanze
- Public Sub New(ByVal Pflanzenhöhe As Integer)
- Höhe = Pflanzenhöhe
- Art = "Strauch"
- End Sub
- End Class
Ergebnis:
Die Pflanze ist so groß: 150 - Baum
--- Funktionsaufruf ByVal---
Die Pflanze ist so groß: 150 - Baum
--- Funktionsaufruf ByRef---
Die Pflanze ist so groß: 50 - Strauch
Kann mir da jemand sagen wo mein Denkfehler liegt, oder ists doch im Buch falsch?