Назначение новых значений объекта из другого объекта - PullRequest
0 голосов
/ 19 апреля 2009

У меня есть ObjectA, значения свойств которого всегда будут присваиваться свойствам другого объекта (ObjectB). То, что я делал, - это чтобы класс службы создал экземпляр получающего ObjectB, а затем присвоил значения новому объекту из ObjectA. Должен ли я вместо этого отправлять весь объект A непосредственно объекту B в параметре сеттера или другом методе? Каковы лучшие практики здесь, если таковые имеются?

EDIT: В классе обслуживания:

public AssignValues (objectA)
{
ObjectB objectB= new ObjectB();
objectB.prop1= ObjectA.prop1;
objectB.prop2= ObjectA.prop2;
}

OR

public AssignValues(objectA)
{
ObjectB objectB= new ObjectB();
objectB.SetValuesFromObjectA= objectA;
}

OR

public AssignValues(objectA)
{
ObjectB objectB= new ObjectB();
objectB.SetValuesFromObjectA(objectA);
}

OR

public AssignValue(objectA)
{
ObjectB objectB= new ObjectB(objectA);
}

Ответы [ 4 ]

2 голосов
/ 19 апреля 2009

Звучит так, будто есть конструктор Object b, который принимает один параметр, Object A:

 // ctor:
 ObjectB( const ObjectA& a ) {
   prop1= a.prop1;
   prop2= a.prop2;
 }

 // or ctor:
 ObjectB( const ObjectA& a ) : prop1(a.prop1), prop2(a.prop2) {
 }

 . . . 
 // use
 ObjectB b(a);
2 голосов
/ 19 апреля 2009

Трудно ответить, потому что мы не знаем, что это за классы. Вы можете сказать: «О, я всегда буду передавать objectA в конструктор objectB» и получится ...

public Chicken( Gorilla g )
{
  this.IsAlive = g.IsAlive;
}

... или что-то столь же бессмысленное. Есть так много способов сделать то, что вы хотите сделать, фундаментальный вопрос о «правильном пути» полностью зависит от того, что вы делаете.

0 голосов
/ 30 апреля 2009

Рассматривали ли вы внедрение зависимостей с помощью AutoFac? Это позволяет вам объявить, что это за отношения, прежде чем что-то делать. Тогда сделайте, используйте и уберите красиво.

0 голосов
/ 19 апреля 2009

Если объекты относятся к одному и тому же типу, я бы предпочел использовать метод Clone() (мелкая копия).

Если объекты бывают разных типов, я бы, вероятно, написал метод, который выглядит как ваш первый случай, чтобы эти два типа были разделены. При желании я мог бы сделать это как метод расширения, который принимает objectA и objectB (если какой-либо из них является структурой, вам может потребоваться сделать это с помощью ref или возвращаемого значения). Как я уже сказал, главная причина, по которой я не хотел бы использовать конструктор или метод класса / экземпляра в этом случае, состоит в том, что вы теперь связываете два типа вместе, когда они не обязательно должны знать друг о друге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...