Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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#_Winforms - Fatal编程技术网

C# 有没有自动同步对象值的方法

C# 有没有自动同步对象值的方法,c#,winforms,C#,Winforms,IDE:VS2010,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 =

IDE:VS2010,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)

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

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

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

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

当然,您需要在该方法中编写逻辑。如果不了解更多关于您的需求和类型的信息,我们很难给出该方法的示例代码。

您可以使用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
    }
这里有一个关于操作符重载的例子


希望这有帮助。

您可以在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;

不允许运算符重载