什么';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将其保留在表单上?

我想我想知道,是表单上的指针,还是指针指向的对象?

什么';It’他真的在表格上

Controls.Add()添加了对传递给它的任何Control的引用。label2=label1只是创建了对label1的另一个引用。Remove()不会删除对象,只是将其从控件列表中删除。

因此,在您的示例中,在调用Controls.Remove()之后:

  • label1将仍然"存在"(即不会进行垃圾收集)
  • 标签2将引用标签1
  • 该标签将不再是表单的一部分,因为表单的控件列表不再包含对该标签的引用

是的,它将从Form中删除label1。我想说,即使是像这样的代码

Form1.Controls.Remove(label2)将从Form中删除标签控件,因为它们都指向完全相同的UI对象。

label1label2只是包含对对象引用的变量。它们都引用了相同的Label实例。调用Controls.Add时,Controls集合还会获得对Label实例的引用,并且它可以在Form的边界内呈现(如果它是可见的,并且坐标在表单的可见部分内)。

您已经向表单添加了标签对象label1引用,并使用label2为其分配了另一个引用。如果您从表单的控制列表中删除了label1,那么您已经删除了表单对标签对象的引用,但label1和label2仍然指向该对象,因此标签对象不会被垃圾收集,直到它们超出范围。