2016-07-21 1 views
1

Je veux écrire un code qui ressemble à ceci:Héritant StreamWriter avec le nouveau nom de fichier

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 

Cependant, je suis obligé de le faire (parce que la première déclaration de Sub New doit être à un constructeur de base):

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 

Y at-il un moyen de contourner ce problème? Dans ce cas, c'est correct, mais je pourrais très bien faire plus de traitement qui ne correspondrait pas à une seule ligne.

+0

La variable LogsDirectory doit avoir sa valeur attribuée avant qu'il ne soit utilisable. On dirait que c'est automagique dans le code, mais c'est juste du sucre de syntaxe, le constructeur s'occupe de ça. Mais attendez, vous écrivez le constructeur. L'œuf doit aller avant le poulet. La même chose s'applique à MyBase.New(). –

Répondre

1

Vous pouvez obtenir ce que vous voulez à l'aide d'une fonction aussi longtemps qu'il est Shared (LogsDirectory faudra aussi être Shared)

Les compiles suivantes:

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

Désolé, en simplifiant mon code pour ne contenir que les éléments pertinents, j'ai manqué un élément critique - j'ai édité ma question. – 8128

+0

S'il vous plaît voir mon edit –