【问题标题】:VB.NET - Automatically initialize extended property of type ObjectVB.NET - 自动初始化 Object 类型的扩展属性
【发布时间】:2012-02-15 17:07:56
【问题描述】:

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

【问题讨论】:

    标签: vb.net class properties


    【解决方案1】:

    您必须先实例化支持 MyDTOItem 属性的字段,然后再尝试对其设置属性值。在开始与它的成员搞混之前,你不能作弊,也不能实例化一个对象。

    例子:

    Private 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
    

    【讨论】:

    • 您建议我在哪个活动中这样做?
    • 有趣的是,如果我使用自动属性,那么我可以创建我的实例:
    • Public Property MyDTOItem As dtDTOItem = New dtDTOItem 有效,但是一旦我扩展属性,我就不会“作弊”并且必须在某处创建对象。
    • VisibleProperty 如何映射到 oBackingField。我没有看到这种关系。
    • 我发现即使定义了私有属性,除非我构造公共属性,否则系统返回并且对象未定义错误。所以我必须明确定义 forwardFacingProperty = New DataType
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多