3
通過非實例類型我的意思是不公開公共構造函數,由於缺乏一個更好的詞的類型。如何使用擴展來重載非實例類型的共享方法?
我想擴展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
或者是根本不可能延長共享的方法呢?
嗯...這就是我想,但不能真正找到關於這個問題的任何有用的信息。感謝澄清。 –
所以正確的方法是將這些擴展方法轉換爲普通方法,然後直接調用它們? –
@StevenDotNet是的,這是最好的方法。或者另一種方式是創建另一種類型,它提供了自己的方法並使用'BitConverter'作爲主要的實現機制。然後使用自定義方法 – JaredPar