【发布时间】:2013-03-08 10:14:44
【问题描述】:
如果一个类只包含静态方法,是否应该创建该类的对象以利用该类的静态方法?
例如。如果MyClass 类只包含静态方法,那么以下哪个是首选?
MyClass.MyStaticMethod(3);
或
MyClass mc = new MyClass();
mc.MyStaticMethod(3);
【问题讨论】:
-
第二个例子甚至无法编译。
如果一个类只包含静态方法,是否应该创建该类的对象以利用该类的静态方法?
例如。如果MyClass 类只包含静态方法,那么以下哪个是首选?
MyClass.MyStaticMethod(3);
或
MyClass mc = new MyClass();
mc.MyStaticMethod(3);
【问题讨论】:
如果它们是静态的,则不需要实例。您不能在 C# 中执行此操作(正确 - 您可以在 Java 中执行此操作,我认为这会让人感到困惑)。
如果你可以实例化一个实例,我会倾向于那个解决方案。如果你需要增强你的方法来维护状态,你会让这些方法变成静态的,这会给自己带来一些麻烦。
【讨论】:
你不能像这样调用静态方法:
MyClass mc = new MyClass();
mc.MyStaticMethod(3);
它不会编译。调用静态方法的唯一方法是,如果在实现它们的类之外调用,则在它们前面加上类型名称。
所以你只能用MyClass.MyStaticMethod(3);给他们打电话
【讨论】:
MyClass.MyStaticMethod(3); is preferred.
另外,您希望将类声明为静态,这样它就不会被错误地实例化并且预期用途很明确
public static MyClass
{
public static Property {get;set;}
public static MyMethod() { .... }
}
【讨论】:
与其他人的回答相反:
您不能在类实例上调用静态方法。这将产生编译器错误。
这让你的问题变得毫无意义,因为只有一个选项:
MyClass.MyStaticMethod(3);
【讨论】:
不,如果只使用实例变量或方法,则不需要构造函数或创建实例
【讨论】:
静态成员与类本身相关联而不是它的对象..
通过对象访问静态成员没有意义,错误..
你应该通过类本身访问静态成员
【讨论】:
恕我直言,
如果该类具有静态方法 + 实例方法,并且您认为只使用静态方法,我建议是时候重构您的代码,使用“Extract CLass”重构来生成一个类并制作它如果静态方法在数量上很重要,请使用这个静态类,而不是将静态方法与实例方法混为一谈。
【讨论】:
如果一个类只包含静态方法,最好把这个类也设为静态。
【讨论】:
如果您在类中声明所有静态方法,那么您将必须使用类名称来调用方法,即
MyClass.MyStaticMethod(3);
是的,你不能通过创建类的对象来调用静态方法
您不需要创建该类的对象。如果您的类不包含任何内容,那么您应该将静态方法创建为静态类。
对于其他非静态变量或方法,您将需要该类对象。
【讨论】: