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

前端之家收集整理的这篇文章主要介绍了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类型的实例方法来计算两点之间的距离(“这个”和另一个) – 或者可能是距离类型上的静态工厂方法.

猜你在找的C#相关文章