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

时间:2012-02-15 17:07:56

标签: vb.net class properties

我正在构建一个具有公共属性(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

1 个答案:

答案 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