VB.NET mit Gleichheitsoperator initialisieren

Scotty86

Mitglied
Guten Abend,

ich habe mich endlich durchgerungen VB6 an den Hut zu stecken und auf VB.NET umzusteigen. Soweit klappt alles mehr oder weniger gut. Da das rumrechnen mit Zeiten und rumcasten mit Strings nicht mehr ganz so einfach geht schreibe ich mir gerade eine eigene Zeit-Klasse, um diesen Komfort wieder genießen zu können.
Bis jetzt geht auch hier alles gut, nur bei einem Punkt komme ich nicht weiter.

Problem: Werte über ein "=" zum Beispiel mit einem String zuweisen (Normale Konstruktoren habe ich schon)

Beispiel:
Code:
Dim ZeitString as String, myZeit as myZeitKlasse 'evtl auch ´: myZeit as  new myzeitKlasse //wenn es nicht anders geht
ZeitString = "00:10:00"
myZeit = Zeitstring 'Das soll nun myZeit initialisiert werden oder zumindest die Werte zuwiesen werden, also den ZeitString parsen
Das parsen ist hier nicht die Problemstellung, das kriege ich selbst hin, aber wie kann ich nun meiner Klasse beibringen, dass den String parst und damit die Werte übernimmt.

Habe schon versucht den = Operator zu überladen und den ersten Input ByRef zu überschreiben, das geht aber leider nicht. Also: Public Shared Operator =(ByRef myTime as myZeitKlasse, ByVal ZeitString as String)..
 
Ich würde
Code:
Dim myZeit as new myzeitKlasse("00:10:00")
bevorzugen.
Du kannst aber auch den Narrowing-Cast-Operator für String nach myZeitKlasse definieren:
Code:
Public Class Test
        Public Sub New(ByVal ZeitString As String)
            ' jetzt was tun
        End Sub

        Public Shared Narrowing Operator CType(ByVal ZeitString As String) As Test
            Return New Test(ZeitString)
        End Operator
End Class
Jetzt kannst du schreiben (falls Option Explicit = Off):
Code:
Dim t As Test = "Ein Text."
Aber ich vermute dass du dir viel zu viel Arbeit machst für Dinge, die .Net bereits kann!
Code:
Dim d As Date = CDate("00:10:00") ' ergibt 1. Januar im Jahr 1 mit Uhrzeit 00:10:00
 
Zuletzt bearbeitet:
Public Shared Narrowing Operator CType(ByVal ZeitString As String) As Test
Genau das habe ich gesucht, tausend Dank!

Die Motivation zur Erstellung einer Time-Klasse war, dass ich ohne großes Casten und Funktionswirrwarr, Zeiten addieren und subtrahieren kann. Wenn man ich .net zwei Dates voneinander abzieht kommt z.B. ein Timespan raus, den man dann wieder in ein Date umrechnen müsste.

So kann ich jetzt einfach wie in VB6 Zeit1 = Zeit2 - Zeit3 machen ;)
Außerdem kann ich mich so bisschen in .net einarbeiten.
 
Ein TimeSpan ist aber die logischere Einheit als ein Datum. Denn was soll denn "1. Mai 2010 minus 1. Februar 2010" sein, wenn nicht ein Zeitintervall?
EDIT: Für den Unterschied zwischen Narrowing und Widening siehe MSDN hier.
 
Zuletzt bearbeitet:
Zurück