表格上真的是什么?

时间:2012-01-10 22:21:47

标签: c# winforms instance

如果我有这段代码:

Label label1 = new Label();  
Form1.Controls.Add(label1);  
Label label2 = label1;

From1真的有什么用途?是label1吗?或者是标签1指向的对象?

换句话说,如果我有这个:

Form1.Controls.Remove(label1);

我有效地删除了标签吗?或者label2将其保留在表格上?

我想我想知道,它是Form上的指针,还是指针指向的对象?

4 个答案:

答案 0 :(得分:3)

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

Form1.Controls.Remove(label2)将从Form删除标签控件,因为它们同时位于完全相同的UI对象上。

答案 1 :(得分:3)

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

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

  • label1仍然“存在”(即不会被垃圾收集)。
  • label2会引用label1。
  • 标签不会仍然是表单的一部分,因为表单的控件列表不再包含对标签的引用。

答案 2 :(得分:1)

label1label2只是包含对象引用的变量。它们都引用了相同的Label实例。调用Controls.Add时,Controls集合也会获得对Label实例的引用,它可能会在Form的范围内呈现(如果它是可见的并且具有与之相关的坐标)形式的可见部分,即)。

答案 3 :(得分:1)

您已经为表单添加了标签对象label1引用,并使用label2为其分配了另一个引用。如果从表单的控件列表中删除label1,则表示已删除表单对标签对象的引用,但label1和label2仍指向该对象,因此标签对象在超出范围之前不会被垃圾回收。