3

我所说的非实例类型是指不公开公共构造函数的类型,因为没有更好的术语。

我想用一个重载来扩展BitConverter类,ToString()它需要一个 type 的参数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 回答