静态与实例方法的使用

时间:2013-05-24 07:18:52

标签: c#

我有一个类有一些方法,我在代码中使用它。他们的目标是生成一个对象并将其返回以供进一步使用。我可以用两种方式实现它。第一种方法 - 将其设为静态,如下所示:

public static class Builder
{
    public static MyObject BuildMyObject(Settings myEnumSetting, int someParam)
    {
        //Building object 
        return MyObject;
    }

    //Other methods          
}

其他方式 - 就是让它像这样:

public class Builder
{
    public MyObject BuildMyObject(Settings myEnumSetting, int someParam)
    {
        //Building object 
        return MyObject;
    }

    //Other methods          
}

在第一种方式中可以像这样创建我的对象:

MyObject obj = Builder.BuildMyObject(Settings.Worker,20);

在第二种情况下,我可以像这样使用它:

MyObject obj = new Builder().BuildMyObject(Settings.Worker,20);

哪种方法更有效?

5 个答案:

答案 0 :(得分:5)

  

哪种方法更有效?

这取决于您的要求,如果您的类的唯一责任是创建一个对象并返回它,那么static类的第一个选项会更好。

答案 1 :(得分:4)

使用静态方法更简单。实例方法为构建器的继承层次结构打开,您可以使用某种依赖注入来选择要使用的构建器。

如果静态方法有效 - 现在就使用它。您始终可以将静态方法转换为外观,以便稍后隐藏继承的构建器类的层次结构的详细信息。

顺便说一句:我使用名称Factory而不是Builder,因为这是工厂方法模式实现的一个示例。 Builder是另一种(更复杂的)模式。

答案 2 :(得分:4)

您描述的概念称为工厂模式。 通常,构建器不使用任何实例成员,因此它应该是静态的。

当成员的凝聚力(http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29)时,应该使用实例,例如,在同一组实例变量(字段)上运行的方法属于一个实例。

答案 3 :(得分:1)

如果这个类只返回一个新对象,那么我会认为静态方式更好,因为你没有在该类或其他东西中存储数据。

因此静态方式比另一方式更有效。 (例如,我不认为创建此类的10个对象会很有用)

您的班级是工厂类/模式

答案 4 :(得分:0)

静态(工厂)类的优点是,您可以跟踪在某些静态属性中创建的对象。根据您的要求,这可能非常有用。