我正在构建一个具有公共属性(MyDTOItem)的页面后面的代码,它本质上是一个DTO对象(dtDTOItem)注意:在我的代码中,Get和Set实际上是真正的代码(我为示例剥离了它)。
我遇到的问题是在Page_Load事件中。当我设置DTO对象的.Member1属性时,Get代码运行而不是Set,因此DTO ibject属性.Member1永远不会被分配。
我发现如果我将代码(MyDTOItem = New dtDTOItem)添加到Page_Load事件,那么它将正确设置值。我想弄清楚的是如何初始化属性对象而不必显式地执行它。它必须是扩展属性,因为我有自定义的Get和Set代码。
提前谢谢。
Public Property MyDTOItem As dtDTOItem
Get
End Get
Set(value As dtDTOItem)
End Set
End Property
<DataContract(), Serializable()> _
Public Class dtDTOItem
<DataMember()> _
Property Member1 As String = ""
<DataMember()> _
Property Member2 As String = ""
<DataMember()> _
Property Member3 As String = ""
End Class
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
MyDTOItem.Member1 = "temp string"
End Sub
答案 0 :(得分:1)
在尝试为其设置属性值之前,必须实例化支持MyDTOItem属性的字段。在你开始搞乱其成员之前,你不会作弊而不是实例化对象。
示例:
私有oBackingField As SomeObject = New SomeObject
公共属性VisibleProperty As SomeObject 获得
结束获取 ......等等。
不涉及任何事件。嗯..它可能适用于Init或PreInit事件..但你不必担心你的漂亮小脑袋。
编辑2
在.NET 4之前,您必须使用支持字段来制作所有属性,即使到目前为止,如果您提供属性访问者,也必须提供自己的支持字段......它看起来像这样:
Private backingField As DataType = New DataType ' Create backing field and initialize it
Public Property forwardFacingProperty As DataType
Get
Return backingField
End Get
Set (byval tValue as DataType)
backingField = tValue
End Set
End Property