【问题标题】:How do I overload shared methods on non-instance types using extensions?如何使用扩展在非实例类型上重载共享方法?
【发布时间】:2012-05-14 15:32:36
【问题描述】:

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

我想用ToString() 的重载扩展BitConverter 类,该类接受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

或者根本不可能扩展共享方法?

【问题讨论】:

    标签: vb.net extension-methods overloading


    【解决方案1】:

    不可能在shared / static 类型上引入方法的重载。扩展方法是一种功能,其使用由类型的实例而非类型本身驱动。

    【讨论】:

    • 嗯...这就是我的想法,但实际上找不到有关该主题的任何有用信息。感谢您的澄清。
    • 那么正确的做法是把这些扩展方法变成普通方法,然后直接调用呢?
    • @StevenDotNet 是的,这是最好的方法。或者另一种方法是创建另一种提供它自己的方法并使用BitConverter 作为主要实现机制的类型。然后使用自定义方法传递该类型的实例
    • 我想我会采用第二种方法。使用模块感觉不对。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多