我有两个班级:
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
时,我得到以下错误:表达式是一个值,因此不能成为赋值的目标。
那么如何从该类中分配值?这样做对我来说非常重要,请有人解释我为什么会这样。谢谢!
答案 0 :(得分:2)
编译器指的是您的Kontrahent
结构。
因为它是一个结构而不是一个类,在构造
中 daneKlienta.DaneKontrahenta.adres_fv =...
DaneKontrahenta
实际上是daneKlienta
中所有属性的副本。
也就是说,在第一个点调用从类中获取get
的隐式DaneKontrahenta
函数返回一个副本,而不是一个引用(因为Kontrahent
不是引用类型) 。
因此,指定的值将随后与DaneKontrahenta
的临时副本一起立即丢弃。
这有意义吗?