具有静态方法的静态类和具有静态方法的常规类之间有什么不同?

时间:2011-09-29 20:43:25

标签: c# static

示例:

public class person
{
    public String Name {get;set;}
}

public static class FactoryStatic
{
    public static person Create(string name)
    {
        return new person() {Name =name};
    }
}

public class FactoryNoneStatic
{
    public static person Create(string name)
    {
        return new person() {Name =name};
    }
}

我的问题是这两个工厂类之间有什么区别,何时使用它们?

6 个答案:

答案 0 :(得分:3)

静态类只能包含静态成员。因此,您无法创建静态类的实例。

答案 1 :(得分:3)

对于直接使用,创建Person对象,没有区别。

然而,可以创建FactoryNoneStatic的实例,这可能是不可取的。

通过将课程标记为static,您可以清楚意图,并防止误用课程。

因此,在这种情况下,请使用static class FactoryStatic

答案 2 :(得分:1)

  

一个类可以声明为static,表示它只包含   静态成员。无法创建静态实例   使用new关键字的类。静态类会自动加载   由.NET Framework公共语言运行时(CLR)实现的程序   或者加载了包含该类的命名空间。

     

使用静态类来包含与a无关的方法   特别的对象。例如,创建一个常见的要求   不对实例数据起作用且未关联的方法集   到代码中的特定对象。你可以使用静态类   持有那些方法。

     

静态类的主要特征是:

     

它们只包含静态成员。

     

它们无法实例化。

     

他们是密封的。

     

它们不能包含实例构造函数。

     

静态方法,字段,属性或事件甚至可以在类上调用   当没有创建类的实例时。如果有任何实例   该类是创建的,它们不能用于访问静态   会员。只存在静态字段和事件的一个副本,并且是静态的   方法和属性只能访问静态字段和静态   事件。静态成员通常用于表示数据或   不响应对象状态而改变的计算;对于   例如,数学库可能包含用于计算的静态方法   正弦和余弦。

我可能会说错了,但是如果你有一个静态类,通常是因为该类中的所有内容都是静态的,并且没有理由维护它的实例。

如果你有非静态类的静态成员,你仍然希望维护该对象的状态(或者至少携带它的一个实例),但是可以在不实例化类的情况下调用与它相关的一些方法。

答案 3 :(得分:1)

一般不多。将class标记为static会立即明显表明它只能拥有static个成员。如果某个类未标记为static,则假设存在非静态成员。

有一种情况我知道您必须使用static类的地方是扩展方法仅允许static

至于何时使用它们,如果该类仅包含静态成员,则将class标记为static以使其显而易见。可能存在一些极小的性能差异,但我认为它们可以忽略不计。

答案 4 :(得分:0)

静态类只能包含静态成员。此外,无法使用new关键字创建静态类的实例。

另一方面,即使没有创建类的实例,静态方法也可以在类上调用。如果创建了类的任何实例,则不能使用它们来访问静态成员。

答案 5 :(得分:0)

以前无法实例化静态类:

public static class StaticClass
{
    public static void Function()
    { /* */ }
}

你不能这样做:

StaticClass sc = new StaticClass();

你会这样做:

StaticClass.Function();
相关问题