Du sätter aldrig dina klassvariabler till något värde men det är dem som du returnerar. Du blir lurad i debuggern eftersom du har samma namn på dina inparametrar till Berekna.
Jag tycker att strukturen ser lite underlig ut dessutom. Vad vill du åstadkomma?
Du löser i all fall problemet genom att göra så här:
Public Class Anställda
Protected m_fnamn, m_inlnamn As String
Public ReadOnly Property namn() As String
Get
Return m_fnamn & " " & m_inlnamn
End Get
End Property
Public Overridable Function VisaLoen(ByVal fnamn As String, ByVal lnamn As String, ByVal val1 As Single, ByVal val2 As Single) As String
Me.m_fnamn = fnamn
Me.m_inlnamn = lnamn
Return namn()
End Function
End Class
Public Class TimAnställd
Inherits Anställda
Private timleon As Single
Private antalTimmar As Single
Public Overrides Function VisaLoen(ByVal fnamn As String, ByVal lnamn As String, ByVal val1 As Single, ByVal val2 As Single) As String
Me.m_fnamn = fnamn
Me.m_inlnamn = lnamn
timleon = val1
antalTimmar = val2
Return "Namn: " & namn() & " Lön: " & Berekna(antalTimmar, timleon)
End Function
Private Function Berekna(ByVal antalTimmar As Single, ByVal timleon As Single) As Single
Return antalTimmar * timleon
End Function
End Class
Men jag tycker att du ska ha en konstruktor istället smat kanske ärva både TimAnställd och Anställda från Person. Något i den här stilen skulle jag nog göra (beroendes lite på vad du vill)
Public Class Person
Protected m_fnamn, m_inlnamn As String
Public Sub New(ByVal fnamn As String, ByVal lnamn As String)
Me.m_fnamn = fnamn
Me.m_inlnamn = lnamn
End Sub
Public ReadOnly Property Namn() As String
Get
Return Me.m_fnamn & " " & Me.m_inlnamn
End Get
End Property
End Class
Public Class Anställda
Inherits Person
Protected m_manadslon As Single
Public Sub New(ByVal fnamn As String, ByVal lnamn As String, ByVal manadslon As Single)
MyBase.New(fnamn, lnamn)
Me.m_manadslon = manadslon
End Sub
Public ReadOnly Property Lon() As String
Get
Return Me.m_manadslon.ToString()
End Get
End Property
Public Function VisaLoen() As String
Return Namn() & " " & Lon()
End Function
End Class
Public Class TimAnställd
Inherits Person
Private m_timleon As Single
Private m_antalTimmar As Single
Public Sub New(ByVal fnamn As String, ByVal lnamn As String, ByVal antalTimmar As Single, ByVal timleon As Single)
MyBase.New(fnamn, lnamn)
Me.m_antalTimmar = antalTimmar
Me.m_timleon = timleon
End Sub
Public Function VisaLoen() As String
Return "Namn: " & Namn() & " Lön: " & Berekna()
End Function
Private Function Berekna() As Single
Return Me.m_antalTimmar * Me.m_timleon
End Function
End Class
sen kan du skapa olika personer och använda dom, typ:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim manads As New Anställda("Petter", "Oskarsson", 20000)
TextBox1.Text = manads.VisaLoen()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim timmis As New TimAnställd("Kalle", "Kula", 160, 220)
TextBox2.Text = timmis.VisaLoen()
End Sub