我理解它的方式,在非静态类中将成员变量声明为 static 会导致该成员变量唯一,无论实例数是多少那个班。
现在,在非静态类中声明的静态方法会发生什么?而且(最重要的是),在非静态类中声明静态方法有什么意义呢?
感谢您的帮助
答案 0 :(得分:21)
如果该方法与类型有关,但与实例无关,那么它可以是静态的。
DateTime.Parse
和Int32.Parse
就是例子。
答案 1 :(得分:5)
它对于创建不是任何对象的成员但需要访问对象内部以便初始化它的工厂方法很有用。
答案 2 :(得分:5)
你需要非静态类f.e中的静态方法。对于工厂模式(如果该类是自己的工厂,正如Jaco Pretorius所指出的那样):
MyClass newInstance = MyClass.Create();
或者如果您想创建辅助方法。 F.E.您可以使用Connect()
,SendCommand()
,ReceiveAnswer()
,Disconnect()
等编写完全正常工作的FTP类,但您希望允许用户轻松上传一个文件,无需实现整个过程:
MyFTPClass.UploadFile("username", "password", "pathToFile");
答案 3 :(得分:4)
只使用其参数的类方法,不调用任何实例方法,不能与任何实例成员一起使用,可以声明为static。实际上,它应该声明为静态,以获得更好的性能,因为静态方法不需要“this”指针。
考虑属于类的小函数,用其参数进行一些计算并返回计算值。这个功能应该是静态的。
答案 4 :(得分:3)
如果不能在非静态类上声明静态方法(和私有成员变量),就不可能实现Singleton模式。
请参阅Singleton
答案 5 :(得分:2)
例如,您有一个类,例如Bank_Account
,您要在其中计算为该类创建的对象的数量。
所以,你有一个静态字段说count
。然后,当您初始化类Bank_Account
的任何对象时,您需要递增存储为此类创建的对象数的字段,递增此静态变量的方法是静态的,因为对于为此创建的所有对象都是相同的类。
答案 6 :(得分:1)
正如 ck 所说,它可以是与该类型有关的方法。重要的是要记住,这将是一个实用程序函数,它将无法访问类型/类中的任何成员变量,因为它可以在没有任何类实例的情况下直接调用。如果您尝试定义访问成员变量(或非静态方法)的静态方法,则实际上会出现编译器错误。