0

실제로 더 많은 기능을 가진 간단한 바이트 구조를 갖게됩니다.vb.net 구조에서 할당 연산자를 정의 할 수 있습니까?

Structure DeltaTime 

    Private m_DeltaTime As Byte 
    Public ReadOnly DeltaTime As Byte 
     Get 
      Return m_DeltaTime 
     End Get 
    End Property 

End Structure 

나는이 두 가지 기능을 갖고 싶어 :

Public Sub Main 
    Dim x As DeltaTime = 80 'Create a new instance of DeltaTime set to 80 
    Dim y As New ClassWithDtProperty With { .DeltaTime = 80 } 
End Sub 

을이를 달성 할 수있는 방법이 있나요

나는 이런 식으로 정의?

구조에서 상속하는 방법이 있다면 단순히 기능을 추가하는 Byte에서 상속 받겠습니다. 기본적으로 사용자 지정 기능이있는 byte 구조 만 있으면됩니다.

내 질문은 새 싱글 톤 멤버 값 유형 (예 : 니블 유형을 정의하려는 경우 등)을 정의하려는 경우에도 유효하며 다음과 같은 할당으로 설정할 수 있습니다. 숫자 또는 다른 언어 입력 표현.

Dim myNibble As Int4 = &HF 'Unsigned 

답변

2

변환 연산자를 작성, 예를 들어, 다음과 같이 즉

, 나는 다음과 같은 INT4 (니블) stucture을 정의 할 그것을 사용할 수 있도록하려면

Structure DeltaTime 

    Private m_DeltaTime As Byte 
    Public ReadOnly Property DeltaTime() As Byte 
     Get 
      Return m_DeltaTime 
     End Get 
    End Property 

    Public Shared Widening Operator CType(ByVal value As Byte) As DeltaTime 
     Return New DeltaTime With {.m_DeltaTime = value} 
    End Operator 

End Structure 

UPDATE : 당신의 제안 Int4 유형에 대해

난 강력하게 당신이 대신에게 Narrowing 연산자를 만드는 것이 좋습니다. 이렇게하면 코드의 사용자가 명시 적으로 캐스팅됩니다. 런타임시 할당이 실패 할 수 있다는 시각적 인 힌트입니다.

Dim x As Int4 = CType(&HF, Int4) ' should succeed 
Dim y As Int4 = CType(&HFF, Int4) ' should fail with an OverflowException 
+0

첫 번째 작업을 할 수 있는지 묻는다면이 80 개의 상수로부터 DeltaTime의 새 인스턴스를 만들고 싶습니다. 나는 그 대답이 "당신은 할 수 없다"라고 생각하지만, C#에서도 똑같은 대답이 유효하다고 생각합니다. – Shimmy

+0

이제 알겠습니다. 대답은 다시 작성되었습니다. –

+0

Nibble 형식을 만들고 싶습니다. & HF (Nibble.MaxValue)보다 높은 값으로 CType을 설정하려고하면 컴파일러 오류가 발생합니다. 가능합니까? – Shimmy

관련 문제