Как вы наследуете StringBuilder в vb.net?
-
05-07-2019 - |
Вопрос
Я хочу добавить свой собственный член в класс 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 и т. д. ...);