Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动更新变量_C#_Reference - Fatal编程技术网

C# 自动更新变量

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 {

我有三个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
    {
        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
}