-3

如果一个类只包含静态方法,是否应该创建该类的对象以利用该类的静态方法?

例如。如果类MyClass只包含静态方法,以下哪个是首选?

MyClass.MyStaticMethod(3);

或者

MyClass mc = new MyClass(); 
mc.MyStaticMethod(3);
4

9 回答 9

3

如果它们是静态的,则不需要实例。您不能在 C# 中执行此操作(正确 - 您可以在 Java 中执行此操作,我认为这很令人困惑)。

如果您可以实例化一个实例,我会倾向于该解决方案。如果你需要增强你的方法来维护状态,你会让这些方法变成静态的,这会给自己带来一些麻烦。

于 2013-03-08T10:15:46.663 回答
2

不能像这样调用静态方法:

MyClass mc = new MyClass(); 
mc.MyStaticMethod(3);

它不会编译。调用静态方法的唯一方法是,如果在实现它们的类之外调用,则在它们前面加上类型名称。

所以你只能用MyClass.MyStaticMethod(3);

于 2013-03-08T10:20:51.073 回答
1

与其他人在回答中所说的相反:

不能在类实例上调用静态方法。这将产生编译器错误。

这使您的问题变得毫无意义,因为只有一个选择:

MyClass.MyStaticMethod(3);
于 2013-03-08T10:21:00.047 回答
1
MyClass.MyStaticMethod(3); is preferred.

此外,您希望将类声明为静态,这样它就不会被错误地实例化并且预期用途很明确

public static MyClass
{
public static Property {get;set;}
public static MyMethod() { .... }
}
于 2013-03-08T10:19:01.033 回答
0

静态成员与类本身相关联,而不是与对象相关联。

通过对象访问静态成员是没有意义的,所以是一个错误..

您应该通过类本身访问静态成员

于 2013-03-08T10:19:43.223 回答
0

不,如果您只使用实例变量或方法,则不需要构造函数或创建实例

于 2013-03-08T10:17:25.103 回答
0

恕我直言 ,

如果该类具有静态方法 + 实例方法,并且您认为只使用静态方法,我建议是时候重构您的代码,使用“Extract CLass”重构来生成一个类并使其成为静态并使用如果静态方法在数量上很重要,则不要将静态方法与实例方法混为一谈。

于 2013-03-08T10:21:15.943 回答
0

如果一个类只包含静态方法,最好也将类设为静态。

于 2013-03-08T10:21:47.090 回答
0

如果您在类中声明所有静态方法,那么您将不得不使用类名调用这些方法,即

 MyClass.MyStaticMethod(3);

是的,您不能通过创建类的对象来调用静态方法

您不需要创建该类的对象。如果您的类不包含任何内容,那么您应该将静态方法创建为静态类。

对于其他非静态变量或方法,您将需要该类对象。

于 2013-03-08T10:28:19.040 回答