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

È stato utile?

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 ...);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top