Überladen von Set Funktion

Rene42

Erfahrenes Mitglied
Hallo,

ich benutze nun in meinen Klassen Properties statt Feldern damit ich die Eingaben besser abfangen und kontrollieren kann.

Nun habe ich eine Property mit dem Namen ID und einem Feld Feld_ID dahinter. Die Setfunktion von einer UShort Variabel ist klar:

Code:
Set (Input As UShort)

Feld_ID=Input

End Set

Nun will ich aber auch Texteigenschaften von Textboxen als ID verarbeiten

Code:
Set (Input As String)

Try

Feld_ID=Input
Catch

Feld_ID=0

End Try
End Set

Der Editor korrigiert den Typ von Input aber immer auf UShort. Gibt es hier keine Überladungen?
 

Cromon

Erfahrenes Mitglied
Hallo Rene42

Nein, properties sind nichts weiter als ein normales Feld jedoch mit einem eigens gewählten setter und getter (sofern angegeben). Ein Feld hat aber einen fixen Typen, so auch Properties. Du kannst aber mit impliziten Operatoren eine gewisse Flexibilität erreichen ohne alles an object zu delegieren und somit auf Typen zu verzichten, siehe:
Visual Basic:
Public Class FieldIDWrapper
    Public Property Value() As Object
        Get
            Return m_Value
        End Get
        Private Set
            m_Value = Value
        End Set
    End Property
    Private m_Value As Object

    Public Shared Widening Operator CType(value As String) As FieldIDWrapper
        Return New FieldIDWrapper() With { _
            Key .Value = value _
        }
    End Operator

    Public Shared Widening Operator CType(value As Integer) As FieldIDWrapper
        Return New FieldIDWrapper() With { _
            Key .Value = value _
        }
    End Operator

    Public Shared Widening Operator CType(wrapper As FieldIDWrapper) As String
        Return wrapper.Value.ToString()
    End Operator

    Public Shared Widening Operator CType(wrapper As FieldIDWrapper) As Integer
        If TypeOf wrapper.Value Is Integer Then
            Return CInt(wrapper.Value)
        Else
            Return Integer.Parse(wrapper.Value.ToString())
        End If
    End Operator
End Class

Class Foo
    Private Field_ID As Integer

    Public Property FieldID() As FieldIDWrapper
        Get
            Return Field_ID
        End Get
        Set
            Field_ID = value
        End Set
    End Property
End Class

Public Class Test
    Public Shared Sub Main()
        Dim foo As New Foo()
        foo.FieldID = 2
        foo.FieldID = "3"
        Dim id As Integer = foo.FieldID
        Dim strId As String = foo.FieldID
    End Sub
End Class
 

Neue Beiträge