示例:
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};
}
}
我的问题是这两个工厂类之间有什么区别,何时使用它们?
答案 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();