C# 自动更新变量
我有三个int变量,即a1、a2和a3。我想要a1,它总是a2和a3的和。如果我更改a2或a3的值,则a1的值应自动更新。如何实现这一点?您需要手动更新它。因为int是一个变量,所以它直接保存值,而不是对的引用。因此,实现一种方法,每当a2或a3发生变化时,它将两者相加并将其值赋给a1。或者只设置一个只读属性,它总是计算值。但是,对于第一种情况:C# 自动更新变量,c#,reference,C#,Reference,我有三个int变量,即a1、a2和a3。我想要a1,它总是a2和a3的和。如果我更改a2或a3的值,则a1的值应自动更新。如何实现这一点?您需要手动更新它。因为int是一个变量,所以它直接保存值,而不是对的引用。因此,实现一种方法,每当a2或a3发生变化时,它将两者相加并将其值赋给a1。或者只设置一个只读属性,它总是计算值。但是,对于第一种情况: private int m_a2; public int A2 { get { return m_a2; } set {
private int m_a2;
public int A2
{
get { return m_a2; }
set
{
m_a2 = value;
CalculateSumAgain();
}
}
将a1设置为类似以下的属性:
public int a1
{
get
{
return a2 + a3;
}
}
public int a2;
public int a3;
@Randolf是对的,你有没有考虑过把它们放到一个类中,让a1自动计算,也就是
public class IntHolder()
{
public int a2 {get; set;}
public int a3 {get; set;}
public int a1
{
get
{
return a2+a3;
}
}
}
如果您希望它是本地函数,那么lambda for a1几乎可以工作,您不能以这种方式拥有本地属性,因此必须使用a1的方法调用语法,如a1:
这让A2知道A1使用它,在这种情况下,方法几乎不是任何抽象,而A3也需要这样做。为什么不让A1自行管理?@Baboon我的回答似乎很清楚,或者只是将A1设置为一个只读属性,该属性总是计算值。但是,对于第一种情况:我回答两个选项,但尽量使其符合OP,第二个是很明显的。我有54个变量,比如a1,这个方法合适吗?@JohnWatson肯定合适。考虑到变量如此之多,这确实可能是最好的选择。为什么?好吧,因为当变量发生变化时,您正在进行预计算。所以,如果这将转到UI,最好在您第一次尝试时在UI请求之前进行计算。如果不是,那么也许最好尝试第二种方法,但考虑到每次将添加54个变量。如果它们只是int,没有什么错,但是当你开始搞乱其他类型时,事情会变得稍微慢一点。+1,并修复了@Baboon的评论。如果需要,还添加了本地版本的答案。我有54个变量,比如a1,这个方法合适吗54,似乎很多?!想不出更好的办法了。约翰·沃森,请看看我的头衔变更是否反映了你问题的意图。否则回滚编辑。我有54个变量,比如a1,这个属性可以放在for循环中吗?@JohnWatson你有54个变量,它们是另外两个变量的总和?
void foo()
{
int a2 = 3;
int a3 = 4;
Func<int> a1 = ()=> a2 + a3;
Console.WriteLine(a1()); // 3+4 = 7
a2 = 5;
Console.WriteLine(a1()); // 5+4 = 9
}