如果我有这段代码:
Label label1 = new Label();
Form1.Controls.Add(label1);
Label label2 = label1;
From1真的有什么用途?是label1吗?或者是标签1指向的对象?
换句话说,如果我有这个:
Form1.Controls.Remove(label1);
我有效地删除了标签吗?或者label2将其保留在表格上?
我想我想知道,它是Form上的指针,还是指针指向的对象?
答案 0 :(得分:3)
是的,它会从label1
中删除Form
。我会说即使像这样的代码
Form1.Controls.Remove(label2)
将从Form
删除标签控件,因为它们同时位于完全相同的UI对象上。
答案 1 :(得分:3)
Controls.Add()添加对传递给它的控件的引用。 label2 = label1只是创建对label1的另一个引用。 Controls.Remove()不会删除该对象,只是将其从控件列表中删除。
因此,在您的示例中,在您调用Controls.Remove()之后:
答案 2 :(得分:1)
label1
和label2
只是包含对象引用的变量。它们都引用了相同的Label
实例。调用Controls.Add
时,Controls集合也会获得对Label
实例的引用,它可能会在Form
的范围内呈现(如果它是可见的并且具有与之相关的坐标)形式的可见部分,即)。
答案 3 :(得分:1)
您已经为表单添加了标签对象label1引用,并使用label2为其分配了另一个引用。如果从表单的控件列表中删除label1,则表示已删除表单对标签对象的引用,但label1和label2仍指向该对象,因此标签对象在超出范围之前不会被垃圾回收。