3

非インスタンス型とは、より適切な用語がないため、パブリック コンストラクターを公開しない型を意味します。

値の区切り記号を表すtype のパラメーターを取る のオーバーロードでBitConverterクラスを拡張したいと考えています。ToString()Char

なんで?デフォルトでは、このToString()呼び出しは、ダッシュ記号で区切られたバイト配列の文字列表現を返します。この署名では、別の区切り文字を指定することはできません。これは非常に残念なことです。

これはインスタンス型ではないため、またはおそらく共有メソッドをオーバーロードしているため、拡張メソッドを定義するための適切な構文を見つけるのに苦労しています。

ここで何が間違っているのか、オーバーロードが IntelliSense に表示されません。

Imports System.Runtime.CompilerServices

Module BitConverterExtensions
    <Extension()>
    Public Function ToString(ByVal converter As BitConverter, ByVal value() As Byte, ByVal delimiter As Char) As String
        Return BitConverterExtensions.ToString(converter, value, 0, value.Length, delimiter)
    End Function

    <Extension()>
    Public Function ToString(ByVal converter As BitConverter, ByVal value() As Byte, ByVal startIndex As Integer, ByVal delimiter As Char) As String
        Return BitConverterExtensions.ToString(converter, value, startIndex, value.Length, delimiter)
    End Function

    <Extension()>
    Public Function ToString(ByVal converter As BitConverter, ByVal value() As Byte, ByVal startIndex As Integer, ByVal length As Integer, ByVal delimiter As Char) As String
        Dim bytes As String = BitConverter.ToString(value, startIndex, length)
        Return bytes.Replace("-"c, delimiter)
    End Function

End Module

それとも、共有メソッドを拡張することは単に不可能ですか?

4

1 に答える 1

3

型にメソッドのオーバーロードを導入することはできませんshared / static。拡張メソッドは、型自体ではなく、型のインスタンスによって使用が駆動される機能です。

于 2012-05-14T15:35:12.833 に答える