具有静态方法的静态类和具有静态方法地常规类之间的区别是什么



示例:

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};
    }
}

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

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

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

通过将类标记为static,您可以清楚地了解意图,并可以防止对该类的错误使用。

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

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

类可以声明为静态,表示它只包含静态成员。无法创建静态的实例使用new关键字初始化。静态类自动加载当程序或者加载包含该类的命名空间。

使用静态类来包含与特定对象。例如,创建不作用于实例数据且不关联的方法集到代码中的特定对象。您可以使用静态类坚持那些方法。

静态类的主要特征是:

它们只包含静态成员。

它们无法实例化。

它们是密封的。

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

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

我可能说错了,但如果你有一个静态类,通常是因为该类中的所有东西都可以是静态的,而且从来没有理由维护它的实例

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

一般来说不多。将class标记为static使其立即明显地只能具有static成员。如果一个类没有标记为static,那么假设存在非静态成员。

我知道有一种情况必须使用static类,那就是扩展方法只允许在static中使用

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

静态类中只能有静态成员。此外,不可能使用new关键字创建静态类的实例。

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

简单地说,静态类不能实例化,例如:

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

你不能这样做:

StaticClass sc = new StaticClass();

你会这样做:

StaticClass.Function();

最新更新