初始化对象c#

时间:2014-06-05 06:59:08

标签: c# .net design-patterns

我有一个有很多属性要设置的对象。初始化这种对象的最佳做法是什么?

我已经创建了一个静态方法,例如

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生成的

2 个答案:

答案 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...
}