[英]what the point of declaring a static method in a non-static class?
以我的理解,在非静态类中将成员变量声明为static会导致该成员变量是唯一的,而不管该类实例的数量。
现在,在非静态类中声明的静态方法会怎样? 并且( 最重要的是 ),在非静态类中声明静态方法有什么意义?
感谢您的帮助
如果该方法与类型有关,而与实例无关,则它可以是静态的。
DateTime.Parse
和Int32.Parse
是示例。
这对于创建不是任何对象的成员但需要访问对象内部以对其进行初始化的工厂方法很有用。
对于工厂模式,您需要在非静态类fe中使用静态方法(如Jaco Pretorius指出的,如果该类是其自身的工厂):
MyClass newInstance = MyClass.Create();
或者,如果您想创建辅助方法。 例如,您可以使用Connect()
, SendCommand()
, ReceiveAnswer()
, Disconnect()
等编写一个完全正常工作的FTP类,但是您希望允许用户轻松上传一个文件,而无需实现整个过程:
MyFTPClass.UploadFile("username", "password", "pathToFile");
仅适用于其参数,不调用任何实例方法且不适用于任何实例成员的类方法可以声明为静态。 实际上,为了获得更好的性能,应该将其声明为静态的,因为静态方法不需要“ this”指针。
考虑属于类的小函数,使用其参数进行一些计算并返回计算出的值。 此功能应该是静态的。
如果无法在非静态类上声明静态方法(和私有成员变量),则无法实现Singleton模式。
见辛格尔顿
例如,您有一个例如Bank_Account
的类,您想在其中计算为该类创建的对象数。
因此,您只有一个静态字段,说count
。 然后,当初始化Bank_Account
类的任何对象时,您需要增加用于存储为该类创建的对象数量的字段,增加此静态变量的方法是静态的,因为为该类创建的所有对象都是相同的。
如ck所说,可能是与类型有关的方法。 重要的是要记住,这将是一个实用程序函数,它将无法访问类型/类中的任何成员变量,因为可以直接调用它而无需类的任何实例。 如果尝试定义访问成员变量的静态方法(或非静态方法),则实际上会出现编译器错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.