데이터 패킷을 구성하는 16 진수 문자열을 반환하는 다음 함수가 있지만이 값은 바이트, UShort, Integer, Single 또는 String이 될 수 있습니다.Vb.net 일반 함수는 형식을 변환 할 수 없습니다. T
Public Function GetWriteString(ByVal op As Operation, ByVal value As UShort) As String
Dim dataString As String = DATA_CONST & WRITE_CONST & op.ToString(Operation.Accessibility.WRITE) & ToHex(value)
Dim byteCount As String = ToHex(GetByteCount(dataString))
Return headerString & byteCount & CRC_Module.HeaderCRC(headerString & byteCount) & dataString & CRC_Module.DataCRC(dataString)
End Function
내가 항상 동일하기 때문에 일반적인 함수 기능을 만들고 싶어, 유일한 차이점은 ToHex(value)
부분이다. ToHex
함수는 위에 지정된 각 데이터 형식에 대한 오버로드 된 함수이므로 값에 따라 다른 문자열을 반환합니다. 공공 기능 ToHex (바이트로 16 진수) 문자열과 같은 : 유형의 가치 나, 함수가 일반적인 만들려고하면
Public Function GetWriteString(Of T)(ByVal op As Operation, ByVal value As T) As String
Dim dataString As String = DATA_CONST & WRITE_CONST & op.ToString(Operation.Accessibility.WRITE) & ToHex(value)
Dim byteCount As String = ToHex(GetByteCount(dataString))
Return headerString & byteCount & CRC_Module.HeaderCRC(headerString & byteCount) & dataString & CRC_Module.DataCRC(dataString)
End Function
가 액세스 가능한 'ToHex'는 이러한 인수로 호출 할 수 있기 때문에 오버로드 확인에 실패했습니다 "라는 오버로드 된 ToHex
함수 각각에 대해 'T'를 'Byte'로 변환 할 수 없습니다. 이 함수를 일반화하는 방법이 있습니까? 그렇다면이 방법이 가장 좋습니다. 함수의 매개 변수에 명시 적으로 각 데이터 형식을 나타내는 5 가지 함수를 만들어야합니까?
ToHex의 기능 :
Public Function ToHex(ByVal characters As String) As String
' Variables
' byteArray - An array of bytes used to hold the characters which were converted to bytes
Dim byteArray As Byte() = defaultEncoding.GetBytes(characters)
' Converts the byte array to a string of hex values
Return BitConverter.ToString(byteArray).Replace("-", "")
End Function
Public Function ToHex(ByVal hex As Byte) As String
Return hex.ToString("X2")
End Function
Public Function ToHex(ByVal word As UShort) As String
Return word.ToString("X4")
End Function
Public Function ToHex(ByVal int As Integer) As String
Return int.ToString("X8")
End Function
''' <summary>
''' Converts a float to a string of hex bytes
''' </summary>
''' <param name="float">A float value to be converted</param>
''' <returns>A string of hex bytes</returns>
Public Function ToHex(ByVal float As Single) As String
' Variables
' byteArray - An array of bytes used to hold the bytes that make up the floating point
Dim byteArray = defaultEncoding.GetBytes(float)
' Reverses the byte array
Array.Reverse(byteArray)
' Converts the byte array to a string of hex values
Return BitConverter.ToString(byteArray).Replace("-", "")
End Function
나는 모든 유형에 대한 자신의 과부하를 생각한다 보다 명확하고 유지 보수 가능한 접근 방식이 될 것입니다. – Fabio
ToHex 란 무엇입니까? 그 기능이 내장되어 있습니까? 아니면 쓴 것입니까? 그것을 일반화 할 필요가 있거나 단순히'Object'를 받아 들일 필요가 있습니다. 여기서 제네릭을 사용하는 것이 모두 유용하다는 것을 확신하지 못합니다. – sstan
제네릭을 계속 사용한다면 ToHex 메소드는 전달 된 타입을 결정하기 위해'If' 나'Select' 문을 사용해야하고 – Fabio