Come erediti StringBuilder in vb.net?
-
05-07-2019 - |
Domanda
Voglio aggiungere il mio membro alla classe StringBuilder, ma quando vado a crearlo IntelliSense non lo visualizza.
public class myStringBuilder()
Inherits System.Text.[StringBuilder should be here]
....
end class
È anche possibile? grazie
Soluzione
StringBuilder
è NotInheritable
(aka sigillato
in C #) quindi non puoi derivarne. Potresti provare a racchiudere StringBuilder
nella tua classe o prendere in considerazione l'utilizzo di metodi di estensione invece.
Altri suggerimenti
No, StringBuilder è un NotInheritable classe. Potresti provare a racchiudere un'istanza StringBuilder , ma puoi ne erediti. Puoi anche utilizzare metodi di estensione , se stai usando .NET 3.5.
Questo è quello che mi è venuto in mente, per coloro che sono curiosi:
Imports System.Runtime.CompilerServices
Module sbExtension
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, arg0), ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, ByVal arg0 As Object, _
ByVal arg1 As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, arg0, arg1), ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object, _
ByVal arg1 As Object, _
ByVal arg2 As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, arg0, arg1, arg2), ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal ParamArray args() As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, args), ControlChars.NewLine)
End Sub
End Module
StringBuilder è una classe sigillata ... quindi l'ereditarietà non è consentita.
StringBuilder è sigillato. Non puoi ereditare da esso.
Se si utilizza una versione precedente di .Net, è possibile scrivere sostanzialmente la stessa classe StringBuilderExtensions e quindi chiamare esplicitamente il metodo statico.
Con .Net 3.5: myStringBuilder.MyExtensionMethod(etc...);
Pre- .Net 3.5: StringBuilderExtensions.MyExtensionMethod (myStringBuilder, ecc ...);