什么';It’他真的在表格上
本文关键字:真的 表格 It 什么 | 更新日期: 2023-09-27 18:19:53
如果我有这个代码:
Label label1 = new Label();
Form1.Controls.Add(label1);
Label label2 = label1;
From1上到底有什么?它是标签1吗?还是标签1指向的对象?
换句话说,如果我有这个:
Form1.Controls.Remove(label1);
我是否有效地去除了标签?还是标签2将其保留在表单上?
我想我想知道,是表单上的指针,还是指针指向的对象?
Controls.Add()添加了对传递给它的任何Control的引用。label2=label1只是创建了对label1的另一个引用。Remove()不会删除对象,只是将其从控件列表中删除。
因此,在您的示例中,在调用Controls.Remove()之后:
- label1将仍然"存在"(即不会进行垃圾收集)
- 标签2将引用标签1
- 该标签将不再是表单的一部分,因为表单的控件列表不再包含对该标签的引用
是的,它将从Form
中删除label1
。我想说,即使是像这样的代码
Form1.Controls.Remove(label2)
将从Form
中删除标签控件,因为它们都指向完全相同的UI对象。
label1
和label2
只是包含对对象引用的变量。它们都引用了相同的Label
实例。调用Controls.Add
时,Controls集合还会获得对Label
实例的引用,并且它可以在Form
的边界内呈现(如果它是可见的,并且坐标在表单的可见部分内)。
您已经向表单添加了标签对象label1引用,并使用label2为其分配了另一个引用。如果您从表单的控制列表中删除了label1,那么您已经删除了表单对标签对象的引用,但label1和label2仍然指向该对象,因此标签对象不会被垃圾收集,直到它们超出范围。