2013-02-13 90 views
0

因此,在我的类'myInfo'中,我有一个别名属性'HeaderInfo',它是一个属性类,它实际上是一个更深层类的标题。在设置子属性时调用父属性集

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

+0

在'info'中设置属性后,您可以将'myHeader'从'info'分配给'Someotherclass.Foo.Bar.AnotherThing.Header'。 'Someotherclass.Foo.Bar.AnotherThing.Header = info.HeaderInfo' – 2013-02-13 14:54:17

+0

@JohnWillemse是的,我想我会那样做。我正在尝试在myInfo的构造函数中执行此操作,因此它只是作为参考,但似乎并没有明显地以这种方式工作。 – 2013-02-13 15:02:53

+1

不,在您设置属性之前调用构造函数,并且您留下了相同的问题。一旦属性被设置,只需“复制”标题信息。 – 2013-02-13 15:04:43

回答

1

为了使这种情况自动发生,您需要更改myHeader类型中属性的setter,并且为了实现这一点,您的类型实例必须知道myInfo类型的特定实例。

让我们来看看为什么这不符合你的希望。要做到这一点,我就掰开这种说法:

info.HeaderInfo.ID = "ID HERE" 

当执行该语句,首先info变量必须取消引用得到它指的是对象实例。 当我们有这个对象时,我们必须得到(没有设置)HeaderInfo属性,这样我们才有了你的myHeader对象实例的引用。一旦我们有了myHeader对象,我们就调用ID属性上的setter来完成分配。

希望能够清楚说明为什么这种方式的效果如此。你确实访问HeaderInfo属性,但你只能使用getter。

附注:如果你看到“对象引用未设置为对象的实例”这是在谈论什么:一个变量或属性,你没有在一个表达式想到的是没有什么/空。

+0

很酷。我想我理解,但是我的项目建立的方式,这样做是不可能的。我想我要做的只是让它创建一个新的Header实例,填写信息,然后将该实例设置为公共属性。 – 2013-02-13 14:54:31