2011-09-29 109 views
1

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

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

我的问题是就是这两个工厂类之间的差异,以及何时使用它们?

回答

3

对于直接使用,一个Person对象的创建,是没有区别的。然而

它可以创建的FactoryNoneStatic一个实例,这可能是不可取的。

通过将该类标记为static,您明确了解了您的意图,并且防止错误使用该类。

所以在这种情况下,使用static class FactoryStatic

3

静态类只能包含静态成员。所以你不能创建一个静态类的实例。

+0

刚要清楚,这与Java中的相同声明有很大不同,对吗? – corsiKa

+0

我明白那个部分,但是当我们使用第一个而不是第二个时,反之亦然。 – retide

+0

在你的例子中,它没有区别。 –

1

一个类可以声明为静态,表明它只包含 静态成员。无法使用new关键字创建类的静态 实例。当程序 或包含该类的名称空间被加载时,静态类将被.NET框架公共语言运行时(CLR)自动加载 。

使用静态类来包含不与 特定对象关联的方法。例如,创建一组不会影响实例数据的方法并且不会将 关联到代码中的特定对象,这是常见的要求。你可以使用一个静态类 保存这些方法。

静态类的主要特点是:

它们只包含静态成员。

它们不能被实例化。

它们被密封。

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

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

我可能会指出这个错误,但如果你有一个静态类,它通常是因为一切都在这个类可以是静态的,而且也从来没有一个理由来维持它的一个实例。

如果你有一个非静态类的静态成员,你仍然要保持该对象的状态(或至少携带它的一个实例),但一些方法,涉及到它可以在不实例化类被称为。

1

一般来说不多。将class标记为static使其显而易见,它只能有static成员。如果某个班级未被标记为static,那么假设存在非静态成员。

还有一个情况,我所知道的,你必须使用一个static类是扩展方法在static

至于何时使用它们,只允许如果类仅包含静态成员,然后将class标记为static以使其明显。可能会有一些非常小的性能差异,但我认为它们可以忽略不计。

0

静态类只能包含静态成员。另外,使用new关键字不可能创建静态类的实例。

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

0

只是一个静态类不能被instansiated例如:

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

你不能这样做:

StaticClass sc = new StaticClass(); 

你会做这样的:

StaticClass.Function(); 
相关问题