对于我正在编写的应用程序,我希望具有极端的可扩展性,并且扩展方法似乎能够提供我想要的内容,以及在没有实例的情况下调用它们的能力,我也需要它.
我记得读过静态方法比实例方法更快但没有得到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类型的实例方法来计算两点之间的距离(“这个”和另一个) – 或者可能是距离类型上的静态工厂方法.