【发布时间】:2014-03-04 16:34:12
【问题描述】:
我有一个名为 Form1 的 win 表单窗口,其中 - 一个名为 Label1 的标签, 两个按钮分别命名为 button1 和 button2。
当我点击 button1 时,它会创建一个名为 f 的 Form1 类型的新窗口, 初始化为当前窗口,即this(Form1), f 是发送到一个名为 ChangeByReference 的方法作为参考。
ChangeByReference 方法更改表单的文本、Label1 的文本和前景色,即 通过引用传递
当我点击 button2 时,这个实例方法名为 ChangeByValue 作为值。
ChangeByValue 方法创建一个新窗口,初始化为 Form1 的默认构造函数, 然后将其设置为参数 valForm,我更改了一些属性并最终使用 显示方法。
现在的问题是为什么 ChangeByValue 方法调用会破坏原始窗口 并显示新表单,因为它的参数是按值传递的?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Text = "Original Window";
}
public void ChangeByReference(ref Form1 refForm)
{
Form1 f = refForm;
f.label1.Text = "This is changed by Reference";
f.label1.ForeColor = Color.Aquamarine;
}
public void ChangeByValue(Form1 valForm)
{
Form1 f = new Form1();
f = valForm;
f.Text = "Changed Window";
f.label1.Text = "This is changed by Value";
f.label1.ForeColor = Color.Red;
f.Show();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f = this as Form1;
ChangeByReference(ref f);
}
private void button2_Click(object sender, EventArgs e)
{
ChangeByValue(this);
}
}
【问题讨论】:
标签: c# winforms data-structures