对于简单的函数,静态优于非静态的任何优点
本文关键字:静态 于简单 于非 任何优 函数 简单 | 更新日期: 2023-09-27 18:02:56
这只是为了满足我的好奇心。做其中一种比另一种有什么不同或优势吗?
public static void Save(Guid id, int a, string b)
{
//Save a and b to the database using PK id
}
在:Guid ID {get; set;}
int A {get; set;}
string B {get ;set;}
public void Save()
{
//Save A and B to the database using PK ID
}
编辑:一些上下文:Web UI将JSON传递给静态页面方法。Page Method解析JSON并将新变量传递给其他DLL中的静态类。然后使用实体框架来更新数据库。这样可以吗?
我绝对更喜欢实例方法而不是静态方法。原因是静态方法意味着您必须在系统中引入全局可变状态。为了正常工作,静态方法需要以静态方式访问某种数据库连接。
应该尽可能避免全局可变状态。这是一个迫在眉睫的bug农场,会阻碍将来对代码库的修改(比如引入多线程)。
您给出的示例似乎表明您正在编写某种持久化API,对此我强烈建议使用可实例化的类。对于像实用程序类这样的东西,使用静态方法是可以的,但是如果过度使用静态方法,您将很快发现代码变得不可扩展和不可维护。
实际上,这取决于您使用该方法的情况。
例如,如果您正在实现一个命令模式,并且您不想每次都实例化一个对象,那么静态方法可能会很有用。
同样,如果你只是在类中添加一些功能,那么将方法设置为静态是没有任何意义的。
这些都不意味着一个比另一个好。这只是意味着它们有不同的用途。枪是一件非常有用的装备,但当你想关掉电视的时候就不是了。明白我的意思了吗?
密封函数总是优于非密封函数,因为JITTER可以(选择)内联前者。静态函数总是密封的,就像密封类中的所有方法一样。但是,最好避免将属性复制到静态对象上。
所以就像Chris上面说的,你需要根据具体情况来决定。99%的情况下,这并不重要,因为性能足够好,或者瓶颈在其他地方,所以保持代码整洁。
这基本上就是"面向对象编程相对于结构编程的优势"。在您的示例中,数据库连接将起决定性作用:它可以是类的字段,并且可以在构造函数中提供一次。如果需要,方法可以使用它。对于静态方法,您需要在参数中提供所有内容,甚至是始终相同的内容。
不依赖于对象内部状态的方法应该是静态的