当前位置: 首页 > 编程语言 > C#

什么更好?静态方法和实例方法分享

时间:2023-04-10 21:16:38 C#

哪个更好?静态方法or实例方法我发现有两种方法叫做静态方法和实例方法及其区别。但是我还是不能理解一个的优点。有时候觉得静态方法不是100%面向对象的。这两者之间有什么性能差异吗?有人可以帮忙吗?在一个完美的面向对象的世界中,可能不需要静态方法(我认为Eiffel也没有)。但归根结底,重要的不是代码的纯度(C#有足够多的概念不是严格意义上的纯OO,比如扩展方法),而是你做了什么。您可以将静态方法用于一般辅助方法(不需要它们自己的一般辅助类或状态)或Color.FromARGB()之类的方法,其行为有点像值类型的构造函数。通常,任何不触及对象状态(因此比对象的类更具体)的方法都可以是静态的。应该没有真正的性能差异。反正不是很能衡量。JanGray的优秀文章Writingfastermanagedcode:Knowingwhatthecostsare有一些硬数据,但要小心。静态方法的用处主要是当你需要在不实例化对象的情况下调用方法时。例如,静态方法实际上可能会查找现有实例并返回它(例如单例实例)。正如其他人所说,在不访问状态的情况下,您可以将任何方法设为静态,并且您将获得微小的性能提升。如果您真的希望能够在特定实例上调用该方法,并获得多态性的好处(即派生类可以覆盖该方法的行为),那么您应该使它成为一个实例方法。如果您的类实现接口,则属于这些接口的方法也必须声明为实例方法。实例方法对实例很严格。所以你可以看到静态方法的一个优点是它们不靠近实例。其他对象可以(如果可见)使用静态方法来解决它们的问题。有时这很好,也很需要。然后你必须考虑将静态方法保留在同一个类中,或者你是否开始构建实用程序类以供更广泛的使用。我不认为使用静态方法是“更少的OO”。静态方法是避免OO缺点的一种方法(尤其是在单继承语言中)。您可以将其称为更实用的方法(我知道这不是真的)。考虑到所有这些只是一堆问题,您应该询问您的代码并决定它是实例方法、同一类的静态方法还是另一个类的静态方法更好。我什至不会考虑性能问题。它会削弱你的设计,差异并不大。如果您有性能问题,那么性能很重要。实例方法需要传递一个隐式参数(this引用),这使得它们比静态方法稍慢。但这真的不应该成为喜欢他们的理由。有关相关讨论,请参阅:*Can*astaticC#methodbestatic?如果您的方法使用非静态数据成员,请不要将其设为静态(您“不能”)。如果您的方法不使用任何非静态数据成员,您可以将其设为静态,但这主要取决于您的设计,而不是它是否使用非静态成员(正如Mehrdad所说,无论如何在性能上没有太大差异)。如果您的类中没有非静态数据成员,有时最好将所有方法设为静态(例如,将辅助函数分组到一个类下以获得良好的顺序)。我部分地根据C#的传统进行猜测,但我怀疑它与其他OO语言相同。静态方法不需要使用对象。一个很好的例子是:Doublepi=Math.PI。实例方法确实需要一个对象。一个例子是:整数x=9;整数y=x.sqrt();并非属于某个类的所有信息都需要为该类实例化的对象才能访问它。所有可用于创建对象的常量(Math.PI、Window.OVERLAPPED等)都是这方面的主要例子。没有人比另一个更好。这真的取决于你的要求。如果要将更改应用于整个类,则调用类方法。当您不将更改应用到类而是应用到该类的唯一实例(对象)时,将调用实例方法。所以我看不出一个应该比另一个更好的原因。C#学习教程就这些:还有什么更好的?所有静态方法或实例方法分享的内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: