VB.NET - 自动初始化对象类型的扩展属性

问题描述:

我正在构建一个具有公共属性(MyDTOItem)的本质上是DTO对象(dtDTOItem)的代码注意:在我的代码中,Get和Set实际上是实际的代码(我为例子剥离了它)。VB.NET - 自动初始化对象类型的扩展属性

我遇到的问题是在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 

您必须在尝试设置属性值之前实例化支持您的MyDTOItem属性的字段。在开始搞乱其成员之前,你不会欺骗,也不会安装对象。

例子:

私人oBackingField作为SomeObject =新SomeObject

公共财产VisibleProperty作为SomeObject 获取

最终获取 ....等

没有参与事件。那么..它可能适用于Init或PreInit事件..但你不必担心你的那个漂亮的小脑袋。

EDIT 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 
+0

你推荐哪个事件我在做? – wavedrop 2012-02-15 17:51:32

+0

有趣的是,如果我使用自动属性,那么我可以创建我的实例: – wavedrop 2012-02-15 17:55:10

+0

Public Property MyDTOItem As dtDTOItem = New dtDTOItem的作品,但只要我扩展属性,我不会“欺骗”,必须创建某个地方的对象。 – wavedrop 2012-02-15 17:55:50