0

因此,在我的类“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' 中设置,因为我不是直接设置属性,而是在假设它会传播的情况下设置它的子属性。我不了解自定义类型的属性如何工作吗?有没有办法传播这个?

4

1 回答 1

1

要自动实现这一点,您需要更改 myHeader 类型中的属性的设置器,并且为了使您的类型实例能够工作,您必须了解 myInfo 类型的特定实例。

让我们看看为什么这不能像您希望的那样工作。为此,我将拆分此声明:

info.HeaderInfo.ID = "ID HERE"

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

希望这能弄清楚为什么它会以这种方式工作。您确实可以访问 HeaderInfo 属性,但您只使用过 getter。

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

于 2013-02-13T14:41:46.510 回答