从另一个对象中分配新的对象值
问题描述:
我有一个ObjectA,其属性值将始终分配给另一个对象的(ObjectB)属性。我一直在做的是让一个服务类实例化接收ObjectB,然后将这些值从ObjectA分配给新对象。我是不是应该使用setter参数或其他方法将整个objectA直接发送到Object B?如果有的话,什么是最佳实践?从另一个对象中分配新的对象值
编辑: 在服务类:
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);
}
答
这很难回答,因为我们不知道这些类是什么。你可能会说,“哦,我会一直传递到对象A对象B的构造函数”和风与...
public Chicken(Gorilla g)
{
this.IsAlive = g.IsAlive;
}
...什么一样荒谬。有很多方法可以做你想做的事情,“正确方式”的根本问题完全取决于你在做什么。
答
听起来像有一个对象B的构造函数,只有一个参数,一个对象:
// 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);
答
如果对象是同一类型的,我可能会更喜欢使用Clone()
(浅拷贝)方法。
如果对象是不同的类型,我可能会写一个看起来像你的第一个案例,以保持两种类型分开的方法。或者,我可以将它作为一个扩展方法,它接受objectA和objectB(如果其中一个是结构体,则可能必须通过ref或返回值来完成此操作)。正如我所说的,在这种情况下,我不想使用构造函数或类/实例方法的主要原因是您现在将两种类型绑定在一起,因为它们可能不一定非得真正了解对方。
答
你有没有考虑用AutoFac进行依赖注入?它允许你在实际做任何事情之前声明关系。然后很好地制作,使用和清理。
这是一个关于'构造参数'与'空构造函数然后setter'相关的问题?或者关于传递'Foo(objA)'与'Foo(objA.Prop1,objA.Prop2,objA.Prop3)'有关的问题?或者是其他东西? – Brian 2009-04-19 02:29:48