2016-07-21 22 views
1

Ich mag Code schreiben, der wie folgt aussieht:Vererben von Stream mit neuen Dateinamen

Public Class LogFile 
    Inherits StreamWriter 

    Private LogsDirectory As String = Application.StartupPath & "\" & "logs\" 

    Public Sub New(shortName As String)    
     Dim fullFilePath As String = LogsDirectory & shortName & "_" & Format(Now, "HHmmss") & ".log"  
     MyBase.New(fullFilePath) 
    End Sub 

End Class 

aber ich bin, dies zu tun gezwungen (weil die erste Anweisung von Sub New zu einem Basiskonstruktor sein muss):

Public Class LogFile 
    Inherits StreamWriter  

    Public Sub New(shortName As String)    
     MyBase.New(Application.StartupPath & "\" & "logs\" & shortName & "_" & Format(Now, "HHmmss") & ".log") 
    End Sub 

End Class 

Gibt es einen Weg "um" dies? In diesem Fall ist es in Ordnung, aber ich würde vielleicht gerne mehr Verarbeitung machen, die nicht auf eine einzige Zeile passen würde.

+0

Die LogsDirectory Variable muss seinen Wert zugewiesen haben bevor es nutzbar ist. Sieht so aus, als ob es im Code automatisch ist, aber das ist nur Syntax Zucker, der Konstruktor kümmert sich darum. Aber warten Sie, Sie schreiben den Konstruktor. Das Ei muss vor dem Huhn gehen. Gleiches gilt für MyBase.New(). –

Antwort

1

können Sie erreichen, was Sie eine Funktion wollen mit so lange, wie es ist Shared (LogsDirectory auch Shared sein müssen)

Folgende compiliert:

Public Class LogFile 
    Inherits StreamWriter 

    Public Sub New(shortName As String) 
     MyBase.New(InitFunction(shortName)) 
    End Sub 

    Private Shared LogsDirectory As String = Application.StartupPath & "\" & "logs\" 

    Private Shared Function InitFunction(shortname As String) As String 
     Dim fullFilePath = LogsDirectory & shortname & "_" & Format(Now, "HHmmss") & ".log" 
     Return fullFilePath 
    End Function 
End Class 
+0

Entschuldigung, bei der Vereinfachung meines Codes, um nur die relevanten Elemente zu enthalten, habe ich ein kritisches Element dabei übersehen - ich habe meine Frage bearbeitet. – 8128

+0

Bitte sehen Sie meine Bearbeitung –