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类型的实例方法来计算两点之间的距离(“这个”和另一个) – 或者可能是距离类型上的静态工厂方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |