6

自分のメンバーを StringBuilder クラスに追加したいのですが、作成しようとしても IntelliSense で表示されません。

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

それは可能ですか?ありがとう

4

6 に答える 6

16

StringBuilderNotInheritable(別名sealedC#)であるため、そこから派生することはできません。StringBuilder独自のクラスでラップするか、代わりに拡張メソッドを使用することを検討してください。

于 2008-10-07T16:13:33.167 に答える
3

いいえ、StringBuilderNotInheritableクラスです。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

以前のバージョンの .Net を使用している場合は、基本的に同じ StringBuilderExtensions クラスを作成し、代わりに静的メソッドを明示的に呼び出すことができます。

.Net 3.5 の場合: myStringBuilder.MyExtensionMethod(etc...);

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

于 2008-10-07T16:53:46.423 に答える
1

StringBuilder はシール クラスなので、継承は許可されません。

于 2008-10-07T16:13:19.343 に答える
1

StringBuilder は封印されています。そこから継承することはできません。

于 2008-10-07T16:13:31.153 に答える