Вопрос

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

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

Это вообще возможно? спасибо

Это было полезно?

Решение

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

Другие советы

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

Это то, что я придумал, для тех, кому интересно:

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 - это запечатанный класс ... поэтому наследование запрещено.

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

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

В .Net 3.5: myStringBuilder.MyExtensionMethod (и т. д.);

Pre .Net 3.5: StringBuilderExtensions.MyExtensionMethod (myStringBuilder и т. д. ...);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top