变量asynchExecutions确实会改变,但它不会改变引用变量。
简单的问题,为什么这个构造函数中的ref参数不会改变传入的原始值?
public partial class ThreadForm : Form
{
int asynchExecutions1 = 1;
public ThreadForm(out int asynchExecutions)
{
asynchExecutions = this.asynchExecutions1;
InitializeComponent();
}
private void start_Button_Click(object sender, EventArgs e)
{
int.TryParse(asynchExecution_txtbx.Text, out asynchExecutions1);
this.Dispose();
}
}
答案 0 :(得分:1)
out参数仅适用于方法调用,您无法“保存”它以便稍后更新。
因此,在start_Button_Click
中,您无法更改传递给表单构造函数的原始参数。
您可以执行以下操作:
public class MyType {
public int AsynchExecutions { get; set; }
}
public partial class ThreadForm : Form
{
private MyType type;
public ThreadForm(MyType t)
{
this.type = t;
this.type.AsynchExecutions = 1;
InitializeComponent();
}
private void start_Button_Click(object sender, EventArgs e)
{
int a;
if (int.TryParse(asynchExecution_txtbx.Text, out a))
this.type.AsynchExecutions = a;
this.Dispose();
}
}
这将更新MyType实例的AsynchExecutions属性。
答案 1 :(得分:1)
你怎么知道asynchExecutions没有变化?你能展示证明这个的测试用例代码吗?
似乎在构造ThreadForm时,asynchExecutions将设置为1.但是,当您调用start_Button_Click时,将asyncExecutions1设置为文本框中的值。
这不会将asyncExecutions设置为文本框中的值,因为这些是值类型。您没有在构造函数中设置指针。
在我看来,您对值类型与引用类型的行为感到困惑。
如果需要在两个组件之间共享状态,请考虑使用静态状态容器,或将共享状态容器传递给ThreadForm的构造函数。例如:
public class StateContainer
{
public int AsyncExecutions { get; set;}
}
public class ThreadForm : Form
{
private StateContainer _state;
public ThreadForm (StateContainer state)
{
_state = state;
_state.AsyncExecutions = 1;
}
private void start_Button_Click(object sender, EventArgs e)
{
Int.TryParse(TextBox.Text, out _state.AsyncExecutions);
}
}