2014-09-23 49 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

相关问题