sve*_*vit 3 c# pass-by-reference
我有两种形式(Form1和Form2).在Form1上有一个'public int i'变量,在Form1构造函数中设置为值1.然后我使用以下代码从Form1打开Form2:
Form2 f2 = new Form2(ref i);
f2.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
Form2的构造函数如下所示:
public int i;
public Form2(ref int x)
{
InitializeComponent();
i = x;
}
Run Code Online (Sandbox Code Playgroud)
然后我将Form2上的变量i设置为值2并关闭Form2.现在我希望Form1上的变量i具有值2(因为传递参数的'ref'关键字),但是值仍然是1.我做错了什么以及为什么ref关键字在我的示例中不起作用?
谢谢
"ref"修饰符仅在构造函数调用期间产生任何差异.它只与该参数相关联......并且在构造函数完成后,该参数不再存在.
执行作业时:
i = x;
Run Code Online (Sandbox Code Playgroud)
那就是复制价值.这不是变量关联i与x以任何其他方式.
作为一般经验法则:如果不更改方法/构造函数中的参数值(在示例中没有),则ref修饰符不会执行任何操作.
你无法做你想做的事情:你不能把一个字段(i在这种情况下,Form2.)作为其他变量的别名.
实际发生了什么.
有许多方法可以通过事件或传入将在object1和object2之间共享的对象来实现您的目标.
Class Form1
{
Object i = new Object();
...
public void DoSomething()
{
Form2 f = new Form2(i);
f.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
这可能是实现您的目标的最简单方法.