2014-11-27 5 views
1

IDE: VS 2010, C# .NET WinFormsЕсть ли автоматический способ синхронизации значений объектов

Привет, У меня 3 объекта obj1 obj2 и obj3 и obj1 некоторые значения инициируются и obj2 некоторые значения инициируются и я хочу в obj3 как конечный объект, который будет содержать значения как obj1 и obj2 см ниже примеров: (значения будут объединены, только если оно не равно нуля или 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) 

есть ли быстрее или предопределенным способ сделать это.

+0

Перегрузка оператора – DevEstacion

ответ

2

Нет, нет встроенной поддержки для m erging ... и если типы value1 и value2 не равны int?, возможно, вы не сможете определить разницу между «не инициализированными» и «инициализированными до 0». (Если они свойство, вы могли бы дать им пользовательские сеттер и помнить, какие свойства были установлены таким образом.)

Вместо того чтобы использовать +, я хотел бы предложить вам создать свой собственный статический метод для получения объединенного экземпляра:

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

Вам, конечно, нужно будет написать логику в рамках этого метода. Мы не можем легко предоставить образец кода для этого, не зная больше о ваших требованиях и типах.

1

Вы можете использовать технику в 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 о перегрузке операторов.

Надеюсь, это поможет.

0

Вы можете сделать оператор перегрузки в 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; 
Смежные вопросы