我有一个有很多属性要设置的对象。初始化这种对象的最佳做法是什么?
我已经创建了一个静态方法,例如
public static Car newCar (BreakModule breakModule, Chassis chassis, Wheel wheel, Seat seat, Headlight headlight)
{
Car newCar = new Car
{
BreakModule = breakModule,
Chassis = chassis,
Wheel = wheel,
Seat = seat,
Headlight = headlight};
return newCar;
}
我认为最佳做法是不要将超过4个参数传递给方法?如果我跟着这个,我怎么能接近这个呢?
这个类本身来自webservice.cs我是使用wsdl工具从xsd生成的
答案 0 :(得分:5)
如果没有所有这些参数,你的车不完整,那么应该有一个构造函数来完成所有这些参数。如果这太复杂了,我很乐意让其他构造函数使用较少的参数来提供工作默认值。
如果不是你的类开始(也许是因为它是从wsdl生成的POCO),我会构建一个工厂类,它具有构造函数提供相同工作的相同方法。
答案 1 :(得分:1)
通常,课程本身应该决定它需要什么,并且不需要在创建期间以最低水平操作。应该在构造函数中请求类必须设置的属性。可以根据需要设置任何其他非必需属性。
由此,您的Car
类应该具有如下构造函数:
public class Car
{
BreakModule _breakModule;
Chassis _chassis;
Wheel _wheel;
Seat _seat;
Headlight _headlight;
public Car(BreakModule breakModule, Chassis chassis,
Wheel wheel, Seat seat, Headlight headlight)
{
this._breakModule = breakModule;
this._chassis = chassis;
this._wheel = wheel;
this._seat = seat;
this._headlight = headlight;
}
private Car()
{
}
}
请注意上面代码示例中的private constructor
。这是为了让类的用户传递所需的属性以使类运行。使用private constructor
,用户无法执行以下操作:
Car car = new Car(); // not allowed!
如果您的课程要求许多属性在最低级别操作,您可以重构您的课程的工作方式。
例如,如果你觉得你的Car
开始时不需要轮子 - 也许它是静止的,被抢劫等...... - 那么你可以添加如下的方法,这将允许您减少传递到构造函数以创建类所需的参数量:
public void AddWheel(Wheel wheel)
{
// Add a wheel...
}