对于我正在编写的应用程序,我希望具有极端的可扩展性,并且扩展方法似乎能够提供我想要的内容,以及在没有实例的情况下调用它们的能力,我也需要它.
我记得读过静态方法比实例方法更快但没有得到GC的优点.它是否正确?
我不太可能改变我的设计,除非我找到一个更好的替代设计而不是速度.但仍然需要额外的信息,我想知道速度,GC等的差异.
编辑:谢谢.更多信息:假设我们有一个Person类:
class Person
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 举报,一经查实,本站将立刻删除。