设置子属性时调用父属性集

时间:2013-02-13 14:27:46

标签: vb.net

所以在我的类'myInfo'中我有一个别名属性'HeaderInfo',它是一个属性作为类,它实际上是更深层次的Header。

Private _header As myHeader
Public Property HeaderInfo() AS myHeader
    Get
        Return _header
    End Get
    Set(ByVal value As myHeader)
        _header = value
        Someotherclass.Foo.Bar.AnotherThing.Header = _header
    End Set
End Property

myHeader是一个具有“名称”,“ID”等属性的类,它们都是字符串。因此,当我以类似Windows窗体的方式引用此属性时,我会

Dim info As New myInfo()
info.HeaderInfo.ID = "ID HERE"
info.HeaderInfo.Name = "Name here"

它的工作范围是info.HeaderInfo的实例正确设置其所有属性,但是

Someotherclass.Foo.Bar.AnotherThing.Header = _header

永远不会在myInfo.HeaderInfo'Set'中设置,因为我没有直接设置属性,我假设它会传播,我设置它的子属性。我不明白自定义类型的属性如何工作?有没有办法传播这个?

1 个答案:

答案 0 :(得分:1)

要自动执行此操作,您需要更改myHeader类型中属性的setter,要使其工作,您的类型实例必须知道myInfo类型的特定实例。

让我们看看为什么这不符合您的希望。要做到这一点,我将打破这一说法:

info.HeaderInfo.ID = "ID HERE"

当执行该语句时,首先必须取消引用info变量以获取它引用的对象实例。 1 当我们拥有该对象时,我们必须 get (未设置)HeaderInfo属性,以便我们引用您的myHeader对象实例。一旦我们有了myHeader对象,我们就会在ID属性上调用setter来完成赋值。

希望能够解决为什么这样做的方式。您可以访问HeaderInfo属性,但只能使用getter。

1 旁注:如果你看到“对象引用没有设置为对象的实例”,这就是它所说的:一个你没想到的变量或属性表达式为Nothing / null。