【发布时间】:2013-07-03 07:06:31
【问题描述】:
我们来看下面的案例
Public MustInherit Class AnexaClass
Inherits ObjectBase
Private _proprietar As New ProprietarClass
Public Property proprietar As ProprietarClass
Get
Return _proprietar
End Get
Set(value As ProprietarClass)
_proprietar = value
OnPropertyChanged("proprietar")
End Set
End Property
End Class
Public Class Anexa3Class
Inherits AnexaClass
Private _Proprietari As New ObservableCollection(Of ProprietarClass)
Public Property Proprietari As ObservableCollection(Of ProprietarClass)
Get
Return _Proprietari
End Get
Set(value As ObservableCollection(Of ProprietarClass))
_Proprietari = value
OnPropertyChanged("Proprietari")
If _Proprietari.Count > 0 Then
Me.proprietar = _Proprietari(0) 'this line sets Proprietar to be the same as the first item of Proprietari and it works as it should be
End If
End Set
End Property
Public MustInherit Class AnexaViewModel(Of AnexaT As {AnexaClass, New})
Inherits ObjectBase
Private _Anexa As New AnexaT
Public Property Anexa As AnexaT
Get
Return _Anexa
End Get
Set(value As AnexaT)
_Anexa = value
OnPropertyChanged("Anexa")
End Set
End Property
Public Sub ToXML()
MsgBox(Anexa.proprietar.nume) 'at this point Anexa.proprietar is nothing
MsgBox(Anexa.Proprietari(0).nume) ' but this is fine, even though Proprietari is only declared inside the derived class Anexa3Class
''Some other code''
End Sub
End Class
Public Class Anexa3ViewModel
Inherits AnexaViewModel(Of Anexa3Class)
End Class
我的程序实例化Anexa3ViewModel,然后将Proprietari property 设置为Proprietar 设置为Proprietari(0)(当我调试时,这似乎工作正常),然后我通过命令按下按钮调用ToXML . ToXML Anexa.proprietar 里面什么都没有,但 Anexa.Proprietari(0) 有正确的值。
显然proprietar 属性丢失了它的值,或者存储了两个Proprietar 属性,一个用于我的基类,一个用于派生类。我认为这只能通过遮蔽基本属性来实现,而我没有这样做。我认为有一些我无法理解的继承概念。
有人能解释一下吗?
Clarifications1:我知道Proprietari 的setter 不会被触发,如果我只是将一个项目添加到集合中。这不是我的问题,因为我一次设置了整个集合并且它的设置器被触发,我可以看到proprietar 获得了正确的值Proprietari(0)。问题是当它到达ToXML 时,它正在失去它的价值。
【问题讨论】:
-
请不要在标题中添加标签信息。这里的标签系统非常擅长对事物进行分类,不需要帮助。 :-) 请参阅Should questions include "tags" in their titles?。谢谢。
-
注意到了。至少我正确使用了标签。
标签: vb.net inheritance properties