2013-02-13 83 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