Como você herdar StringBuilder no vb.net?
-
05-07-2019 - |
Pergunta
Eu quero adicionar meu próprio membro para a classe StringBuilder, mas quando vou para criá-lo IntelliSense não trazê-lo.
public class myStringBuilder()
Inherits System.Text.[StringBuilder should be here]
....
end class
Será que é mesmo possível? graças
Solução
StringBuilder
é NotInheritable
(aka sealed
em C #) para que você não pode derivar a partir dele. Você poderia tentar envolver StringBuilder
em sua própria classe ou considere o uso métodos de extensão em seu lugar.
Outras dicas
Não, StringBuilder é um classe NotInheritable. Você poderia tentar envolver um StringBuilder exemplo, mas pode 't herdam dele. Você também pode usar métodos de extensão , se você estiver usando .NET 3.5.
Isto é o que eu vim com, para aqueles que estão curiosos:
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 é uma classe selada ... então herança não é permitido.
StringBuilder está selado. Você não pode herdar a partir dele.
Se você estiver usando uma versão anterior do NET, você pode escrever, basicamente, a mesma classe StringBuilderExtensions e, em seguida, chamar explicitamente o método estático em seu lugar.
Com o .NET 3.5: myStringBuilder.MyExtensionMethod(etc...);
Pré-Net 3.5: StringBuilderExtensions.MyExtensionMethod(myStringBuilder, etc...);