Как вы наследуете StringBuilder в vb.net? - PullRequest
6 голосов
/ 07 октября 2008

Я хочу добавить свой собственный член в класс StringBuilder, но когда я собираюсь создать его, IntelliSense не вызывает его.

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

Возможно ли это вообще? спасибо

Ответы [ 6 ]

16 голосов
/ 07 октября 2008

StringBuilder это NotInheritable (он же sealed в C #), поэтому вы не можете извлечь из него. Вы можете попробовать обернуть StringBuilder в свой собственный класс или использовать вместо него методы расширения .

3 голосов
/ 07 октября 2008

Нет, StringBuilder - это класс не наследуемый . Вы можете попробовать обернуть экземпляр StringBuilder , но не можете наследовать его. Вы также можете использовать методы расширения , если вы используете .NET 3.5.

2 голосов
/ 07 октября 2008

Вот что я придумал для любопытных:

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 голос
/ 07 октября 2008

Если вы используете более раннюю версию .Net, вы можете написать в основном тот же класс StringBuilderExtensions, а затем явно вызвать статический метод.

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

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

1 голос
/ 07 октября 2008

StringBuilder запечатан. Вы не можете наследовать от него.

1 голос
/ 07 октября 2008

StringBuilder является закрытым классом ... поэтому наследование не допускается.

...