2014-09-23 36 views
1

的目標我有兩個類:結構特性 - 表達式的值,因此不能作爲賦值

Public Class SubiektGT 
    Dim daneKlienta As SklepPobieranieDanych = New SklepPobieranieDanych(Me) 

    Public Sub PrzefiltrujDaneKontrahenta() 
    If daneKlienta.DaneKontrahenta.adres_fv = "" Then 
     daneKlienta.DaneKontrahenta.adres_fv = daneKlienta.DaneKontrahenta.adres_wys 'ERROR 
    End If 
End Sub 
End Class 



Public Class SklepPobieranieDanych 
    Public Structure Kontrahent 
     Public adres_wys As String 
     Public adres_fv As String 
    End Structure 

    Private _daneKontrahenta As Kontrahent 

    Public Property DaneKontrahenta() As Kontrahent 
    Get 
     Return _daneKontrahenta 
    End Get 
    Set(value As Kontrahent) 
     _daneKontrahenta = value 
    End Set 
End Property 

    Public Sub PobierzTowaryKontrahenta() 
     _daneKontrahenta.adres_fv = "" 
     _daneKontrahenda.adres_wys = "a" 
    End Sub 
End Class 

當我嘗試從不同的類值分配給daneKlienta.DateKontrahenta.adres_fv我收到以下錯誤:表達式是一個值,因此不能成爲任務的目標。

那麼如何從該類中指定一個值呢?這樣做對我來說非常重要,並請有人向我解釋爲什麼會發生。謝謝!

回答

2

編譯器指的是你的Kontrahent結構。

因爲它是一個結構,而不是一類,在構建

daneKlienta.DaneKontrahenta.adres_fv =...

DaneKontrahenta實際上是daneKlienta持有物業的副本。

即,隱式get功能在第一點被調用以獲得DaneKontrahenta從類返回一個副本,而不是一個引用(因爲Kontrahent不是引用類型)。

因此,所分配的值將隨即與臨時副本DaneKontrahenta一起立即丟棄。

這有道理嗎?

+1

哦,現在我明白了班級和結構之間的區別,謝謝!所以爲了解決我的問題,我將把結構變成一個類:) – XardasLord 2014-09-23 11:54:00