微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#中的静态方法与实例方法

对于我正在编写的应用程序,我希望具有极端的可扩展性,并且扩展方法似乎能够提供我想要的内容,以及在没有实例的情况下调用它们的能力,我也需要它.

我记得读过静态方法比实例方法更快但没有得到GC的优点.它是否正确?

我不太可能改变我的设计,除非我找到一个更好的替代设计而不是速度.但仍然需要额外的信息,我想知道速度,GC等的差异.

编辑:谢谢.更多信息:假设我们有一个Person类:

class Person

它可以有一个实例distance方法,如:

this.distance (Person p)

这很好,但这并没有让我能够计算2点之间的距离(比如Point3),而不会创建Person类的实例.

我想要做的是:

class Person (no distance methods)

但是距离的扩展方法

distance (this Person,Person)
distance (this Point3,Point3)

这样我可以这样做:

myPerson.distance (yourPerson)

Extensions.distance (pointA,pointB)

EDIT2:@Jon,是的,我认为这就是所谓的(不要获得GC的优势),但我不知何故认为静态方法会产生这种负担/开销.

解决方法

你是什​​么意思“没有得到GC的优势”?方法不是垃圾收集 – 实例是.

虚拟方法比非虚拟方法略慢,我猜在任何实例方法之前都存在令人讨厌的空检查,但它并不重要.选择最合适的设计.

静态方法虽然很难测试 – 例如,如果你通过调用一些静态方法方法Foo()中进行身份验证,那么当你测试Foo()时,你不能只调用一个模拟身份验证器(除非是静态方法)方法本身可以让你这样做).但是,如果您给出了正在测试包含Authenticate()方法的某个接口的模拟实现的原始实例,则可以使其按照您的意愿运行.

编辑:在这种情况下,它听起来像你真正需要的是Point类型的实例方法来计算两点之间的距离(“这个”和另一个) – 或者可能是距离类型上的静态工厂方法.

原文地址:https://www.jb51.cc/csharp/99324.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐