tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von Shakie
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
1196
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Scotty86 Scotty86 ist offline Mitglied Silber
    Registriert seit
    Feb 2005
    Beiträge
    57
    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 :
    1
    2
    3
    
    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)..
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.002
    Ich würde
    Code vbnet:
    1
    
    Dim myZeit as new myzeitKlasse("00:10:00")
    bevorzugen.
    Du kannst aber auch den Narrowing-Cast-Operator für String nach myZeitKlasse definieren:
    Code vbnet:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    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 vbnet:
    1
    
    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 vbnet:
    1
    
    Dim d As Date = CDate("00:10:00") ' ergibt 1. Januar im Jahr 1 mit Uhrzeit 00:10:00
    Geändert von Shakie (02.05.10 um 15:17 Uhr)
    Scotty86 bedankt sich. 

  3. #3
    Scotty86 Scotty86 ist offline Mitglied Silber
    Registriert seit
    Feb 2005
    Beiträge
    57
    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.
     

  4. #4
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Du könntest auch einfach nur mit TimeSpan arbeiten.
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  5. #5
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.002
    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.
    Geändert von Shakie (19.05.10 um 23:52 Uhr)
     

Ähnliche Themen

  1. Objekte initialisieren
    Von starbuck86 im Forum Java Grundlagen
    Antworten: 3
    Letzter Beitrag: 21.10.08, 17:15
  2. GMap neu initialisieren
    Von schlumsch im Forum Java
    Antworten: 0
    Letzter Beitrag: 11.09.08, 10:36
  3. Objekt neu initialisieren
    Von Da_Chris im Forum PHP
    Antworten: 8
    Letzter Beitrag: 04.06.08, 12:39
  4. Array initialisieren
    Von LukeS im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 05.12.06, 08:46
  5. PopUp initialisieren
    Von Stiff im Forum PHP
    Antworten: 4
    Letzter Beitrag: 16.06.06, 14:08