6

我想将我自己的成员添加到 StringBuilder 类,但是当我去创建它时,IntelliSense 并没有启动它。

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

甚至可能吗?谢谢

4

6 回答 6

16

StringBuilderNotInheritable(在 C# 中又名sealed),因此您不能从中派生。您可以尝试包装StringBuilder自己的类或考虑使用扩展方法

于 2008-10-07T16:13:33.167 回答
3

不,StringBuilder是一个NotInheritable类。您可以尝试包装StringBuilder实例,但不能从它继承。如果您使用的是 .NET 3.5,您还可以使用扩展方法。

于 2008-10-07T16:12:39.953 回答
2

这是我想出的,对于那些好奇的人:

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
于 2008-10-07T18:21:58.023 回答
1

StringBuilder 是一个密封类......所以不允许继承。

于 2008-10-07T16:13:19.343 回答
1

StringBuilder 是密封的。你不能继承它。

于 2008-10-07T16:13:31.153 回答
1

如果您使用的是早期版本的 .Net,则可以编写基本相同的 StringBuilderExtensions 类,然后显式调用静态方法。

使用 .Net 3.5: myStringBuilder.MyExtensionMethod(etc...);

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

于 2008-10-07T16:53:46.423 回答