2008-10-07 14 views
6

Quiero agregar mi propio miembro a la clase StringBuilder, pero cuando voy a crearlo, IntelliSense no lo muestra.¿Cómo heredas StringBuilder en vb.net?

public class myStringBuilder() 
    Inherits System.Text.[StringBuilder should be here] 
    .... 
end class 

¿Es posible? gracias

Respuesta

16

StringBuilder es NotInheritable (también conocido como sealed en C#) por lo que no puede derivarse de ello. Puede intentar envolver StringBuilder en su propia clase o considerar usar extension methods en su lugar.

+0

¿Alguien sabe por qué está sellado? – oleks

+0

@oleks: Probablemente porque cuesta dinero probar y validar las API y su sellado reduce este costo. –

1

StringBuilder es una clase sellada ... por lo que la herencia no está permitida.

1

StringBuilder está sellado. No puedes heredar de eso.

1

Si está utilizando una versión anterior de .Net, puede escribir básicamente la misma clase StringBuilderExtensions y luego llamar explícitamente al método estático.

Con Net 3.5: myStringBuilder.MyExtensionMethod(etc...);

Pre-Net 3.5: StringBuilderExtensions.MyExtensionMethod(myStringBuilder, etc...);

2

Esto es lo que me ocurrió, para aquellos que son 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 
+1

Sé que esta es una publicación anterior, pero actualicé el código (y lo porté a C#): http://stackoverflow.com/questions/1272534/how-do-i-port-an-extension-in-vb- net-to-c/1272544 – Anders