我想通过引用将一个变量分配给另一个变量,这样一个变量更新时,另一个变量也会更新。
我有一些变量需要根据连接的硬件正在执行的操作进行更新。我已经建立了一个对象数组,并将每个变量分配给对象数组中的索引。它是更新的对象数组,但是当发生这种情况时,我希望激发我的原始变量的属性设置器,以便可以执行某些操作。之所以使用对象数组,是因为我可以在一个循环中对其进行迭代,并且因为我的原始变量可以具有不同的类型。我在下面展示了我要尝试做的事情的过于简化的版本,希望这是有意义的。
编辑:只是要注意testVars数组中的项目正在其他地方更新,我在下面仅显示了我要做的事情的简化版本。
public partial class Form1 : Form
{
private bool _test0 = false;
private int _test1 = 0;
public object[] testVars = new object[2];
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
testVars[0] = test0;
testVars[1] = test1;
}
public bool test0
{
get
{
return _test0;
}
set
{
_test0 = value;
UpdateTest0();
}
}
private void UpdateTest0()
{
bool NewTest0 = _test0;
}
public int test1
{
get
{
return _test1;
}
set
{
_test1 = value;
UpdateTest1();
}
}
private void UpdateTest1()
{
int NewTest1 = _test1;
}
}
我认为可能对我有用的一种解决方案是使用指针,但是由于变量声明和指针创建必须在我的应用程序的不同范围内,因此将无法工作。同样,我在论坛上阅读的所有内容都建议不要使用指针。
@ Michael Ceber,非常感谢您的及时答复。我想我理解您的意思,并相应地更新了示例代码,但仍然无法达到我的期望。我更新的代码如下
命名空间VariableLinks { 公共局部类Form1:表单 { 私人布尔_test0 = false; private int _test1 = 0;
public ObjectX[] testVars = new ObjectX[2];
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
testVars[0] = new ObjectX();
testVars[0].val = test0;
testVars[1] = new ObjectX();
testVars[1].val = test1;
}
public bool test0
{
get
{
return _test0;
}
set
{
_test0 = value;
UpdateTest0();
}
}
private void UpdateTest0()
{
bool NewTest0 = _test0;
}
public int test1
{
get
{
return _test1;
}
set
{
_test1 = value;
UpdateTest1();
}
}
private void UpdateTest1()
{
int NewTest1 = _test1;
}
private void button1_Click(object sender, EventArgs e)
{
testVars[0].val = true;
}
}
public class ObjectX : object
{
public object val = new object();
}
}
现在,当我的按钮单击事件触发并更新testVars [0] .val时,我希望test0的setter触发,但不会。我想我误会了你的意思?
答案 0 :(得分:0)
如果您将对象或引用类型存储到数组中的对象,即不包含诸如int,bool等值类型的值包含这些值,那么这将有所帮助。
例如,如果您的对象“ objectx”具有名为value的属性,则objectx.value可以存储此类值。
然后您可以为该objectx设置任何您喜欢的变量,并且每当您更新objectx.value的值时,所有变量都将获取更改,因为它们都指向同一对象...
所以在您的示例中
testVars [0] = test0; testVars [1] = test1;
这将变成
testVars [0] .value = test0; testVars [1] .value = test1;
也许是为了实现这一目标
公共对象[] testVars =新对象[2];
应该成为
公共ObjectX [] testVars =新的ObjectX [2];
并将单个公共属性“值”添加到此ObjectX类...
希望如此!