代码之家  ›  专栏  ›  技术社区  ›  Pratik Deoghare

关于getter和setter的问题?

  •  0
  • Pratik Deoghare  · 技术社区  · 15 年前
       class Foo
       {
           public List<float> Data { get ; set ; }  // list of numbers
           private float Total { get ; set ; } // Contains sum of numbers in Data
    
           // Constructors and other stuff.
       }
    

    使用此类的代码不断修改 Data 所以我想看看 Total 也。

    我不想添加重新计算的函数 合计 修改的代码 数据 .

    例子:

       Foo f = new Foo(); // Total = 0 
       f.Data.Add(10);    // Total = 10
       f.Data.Add(30);    // Total = 40
       f[1] = 40;         // Total = 50
       // etc
    

    那么这个问题的解决方案是什么呢?

    6 回复  |  直到 15 年前
        1
  •  2
  •   badbod99    15 年前

    更改get函数以动态返回总计(使用LINQ最简单):

    private float Total
    {
       get
       {
          return Data.Sum();
       }
    }
    

    实际上不需要设置访问器。

        2
  •  4
  •   Lucero    15 年前

    我看不出这里有什么问题。这个 Total 吸气剂 当调用列表时,可以动态计算列表的总数,这根本不会修改列表。但是,我不知道您希望如何实现 设置器 总计…

      private float Total { // Contains sum of numbers in Data
        get {
          float total = 0;
          foreach (float value in Data) {
            total += value;
          }
          return total;
        }
      }
    
        3
  •  4
  •   Yuriy Faktorovich    15 年前

    您正在公开数据,随时都可以删除,我建议如下:

    class Foo
    {
        private List<float> _data = new List<float>();
        public float Total {get; private set;}
        public void Add(float f) { _data.Add(f); Total += f; }
    }
    
        4
  •  1
  •   Audrius    15 年前

    向总getter添加计算逻辑:

    private float Total
    {
      get { return CalculateResult(Data) };
    }
    

    这样你甚至不需要设置器。当然,您可以缓存:在更改数据列表时更改的类中引入脏标志。然后将总getter中的计算结果缓存到本地类字段,并在未设置脏标志的情况下重用该结果(在重新计算时清除)。

        5
  •  1
  •   Ahmed    15 年前

    我认为total属性中不需要setter,但是getter只需重新计算每个调用的和。

    class Foo
       {
           public List<float> Data { get ; set ; }  // list of numbers
           private float Total { get{return Data.Sum()} ; } // Contains sum of numbers in Data
    
    
       }
    
        6
  •  0
  •   Vitaliy Liptchinsky    15 年前

    你为什么需要塞特 Total ?最好的方法是使total自动计算属性和动态计算total的getter值。

    或者…你可以介绍私人领域 data total 重新计算 全部的 在内部 Data 设定器。