0

我有一個實際上是一個具有更多功能的簡單字節的結構。我可以在vb.net Structure中定義一個賦值運算符嗎?

我定義它是這樣的:

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 

有沒有辦法來實現這一目標?

如果有一種方法可以從結構繼承我會簡單地繼承從字節添加我的功能,基本上我只需要一個具有自定義功能的字節結構。

當你想要定義你的新單例子成員值類型(例如,你想定義一個半字節類型等),並且你希望能夠賦值給它時,我的問題也是有效的數字或其他語言類型的表示。

換句話說,我希望能夠做到定義以下INT4(半字節)stucture並使用它作爲如下:

Dim myNibble As Int4 = &HF 'Unsigned 

回答

2

創建轉換運算符,例如

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

我在問你是否可以讓你的第一行工作,我想從這個常量創建一個DeltaTime的新實例。我想答案是「不,你不能」,但我認爲同樣的答案仍然適用於C#。 – Shimmy 2010-07-09 13:57:14

+0

我現在明白了。答案重寫。 – 2010-07-09 14:00:21

+0

我想創建一個Nibble類型,如果我嘗試將CType設置爲高於&HF(Nibble.MaxValue)的值,它應該是編譯器錯誤,是否有可能? – Shimmy 2010-07-22 10:49:22

相關問題