【问题标题】:Is there any automatic way to sync values of objects是否有任何自动方式来同步对象的值
【发布时间】:2014-11-27 06:53:37
【问题描述】:

IDE:VS 2010,c# .net winforms

嗨,我有 3 个对象 obj1 obj2 和 obj3,并且 obj1 启动了一些值,而 obj2 启动了一些值,我希望 obj3 作为最终对象,其中将包含 obj1 和 obj2 的值,请参见以下示例:(只有当它不为 null 或 0 时才会合并这些值。

AClass obj1 = new AClass();
obj1.value1 = 14;
AClass obj2 = new AClass();
obj2.value2 = 15;
//I want
AClass obj3 = new AClass();
obj3 = obj1 + obj2;  // this is not available

//I want to get obj3.value1 = 14 and obj3.value2 = 15 (initiated)

有没有更快或预定义的方法来做到这一点。

【问题讨论】:

  • 做运算符重载

标签: c# winforms


【解决方案1】:

不,没有内置支持合并...除非value1value2 的类型是int?,否则您可能无法区分“未初始化”和“初始化为” 0”。 (如果它们是属性,您可以给它们自定义设置器并记住以这种方式设置的属性。)

建议您创建自己的静态方法来返回合并后的实例,而不是使用+

AClass obj3 = AClass.Merge(obj1, obj2);

当然,您需要在该方法中编写逻辑。如果不了解您的要求和类型,我们无法轻易提供示例代码。

【讨论】:

    【解决方案2】:

    您可以在 C# 中使用一种称为“运算符重载”的技术,这是一个示例:

    class AClass
        {
            public int value1 { get; set; }
            public int value2 { get; set; }
    
            public AClass()
            {
            }
    
            public AClass(int value1, int value2)
            {
                this.value1 = value1;
                this.value2 = value2;
            }
    
            public static AClass operator +(AClass obj1, AClass obj2)
            {
                return new AClass(obj1.value1, obj2.value2);
            }
        }
    
    private void Form1_Load(object sender, EventArgs e)
        {
            AClass obj1 = new AClass();
            obj1.value1 = 14;
            AClass obj2 = new AClass();
            obj2.value2 = 15;
            AClass obj3 = new AClass();
            obj3 = obj1 + obj2;
            label1.Text = obj3.value1.ToString(); // Output 14
            label2.Text = obj3.value2.ToString(); // Output 15
        }
    

    这是一个关于运算符重载的reference

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      你可以在c#中做运算符重载,这里是代码

          private class AClass
          {
              public int Value { get; set; }
      
              public static AClass operator +(AClass a, AClass b)
              {
                  return new AClass
                  {
                      Value = (a != null ? a.Value : 0) + (b != null ? b.Value : 0)
                  };
              }
          }
      

      这样吃。

              AClass a = new AClass() { Value = 5 };
              AClass b = new AClass() { Value = 3 };
              AClass c = a + b;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多