示例:
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();