public class House
{
private Person owner;
private List<Room> rooms;
public House(Person _owner)
{
this.owner = _owner;
this.rooms = new List<Room>();
}
public void AddRoom(Room r)
{
rooms.Add(r);
}
}
我有這個類,我是否正確地說 House 類和 Room 類之間存在組合關系,因為如果你銷毀一個 house 實體,房間串列也會隨之洗掉?
uj5u.com熱心網友回復:
這是合成的一個例子。您正在使用其他課程制作一個課程。
但是,您的問題是轉向垃圾收集。
當 House 的實體被銷毀時,Rooms 屬性的內容會被洗掉嗎?是的。最終。當垃圾收集器處理它時。它可能不會在你認為它消失的那一刻消失。
您可以通過確定性終結來更好地控制堆上事物的生命周期(主要通過using塊實作,但您也可以創建顯式的 dispose 方法)。
很抱歉這里的解釋太長了,但感覺就像你在問兩個問題,所以決定回答這兩個問題 - 并且不想要僅鏈接的答案。
https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals
https://www.oreilly.com/library/view/programming-net-components/0596102070/ch04s05.html
uj5u.com熱心網友回復:
雖然這是一個組合的例子,但我發現很多組合和繼承的例子都是相當人為的。
由于房子是唯一參考房間串列的物件,所以當房子符合收集條件時,房間串列也會如此。所有者或房間可能并非如此,因為所有者或房間可能已添加到其他房屋中。請注意,在 c# 和 .Net 中,我們通常不使用術語“銷毀”,因為垃圾收集器負責回收記憶體,并且我們使用一次性/終結器模式來確保回收其他型別的資源。
我首選的組合/繼承示例是幾何。一個正方形有四個角。正方形是矩形(至少如果它是不可變的)。這在許多程式中都有直接應用,因此實際上提供了一個有用的抽象。
我建議閱讀Eric Lipperts Wizards and Warriors以了解有關面向物件的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414269.html
標籤:
