私は WPF を実装しましたUserControl
。この実装にはデストラクタが含まれています。
このコントロールをウィンドウの一部にして、このウィンドウを破棄し、ガベージ コレクション (GC.Collect()) を強制すると、デストラクタが呼び出されます。
このコントロールを に追加しTabItem
、これを に追加し、後でこれを からTabControl
削除して、ガベージ コレクション (GC.Collect()) を強制すると、デストラクタは呼び出されません。TabItem
TabControl
説明:
タブ項目を追加するコードは次のとおりです。
TabItem tabItem = new TabItem();
tabItem.Header = "User";
UserControl1 userControl1 = new UserControl1();
tabItem.Content = userControl1;
userControl1.Width = Double.NaN;
userControl1.Height = Double.NaN;
userControl1.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
userControl1.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
tc1.Items.Add(tabItem);
そして、これを削除するコードは次のとおりです。
TabItem item = tc1.SelectedItem as TabItem;
if (item != null)
{
item.Content = null;
tc1.Items.Remove(item);
}
TabItem または UserControl1 への参照がなくなることを考えると、デストラクタが UserControl1 に対して呼び出されることが予想されます。
これは明らかにそうではないので、次の質問はなぜですか?