这只是为了满足我的好奇心。与其他
相比,做其中一个是否有任何区别或优势public static void Save(Guid id, int a, string b)
{
//Save a and b to the database using PK id
}
OVER:
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方法解析JSON并将新变量传递给其他DLL中的静态类。然后使用实体框架来更新数据库。这没关系吗?
答案 0 :(得分:2)
我绝对更喜欢静态的实例方法。原因是静态方法意味着您必须将全局可变状态引入系统。为了运行静态方法,需要访问某种类型的数据库连接并静态地执行。
应尽可能避免全球可变状态。它是一个迫在眉睫的bug场,阻碍了对代码库的未来更改(比如引入多个线程)。
答案 1 :(得分:1)
您给出的示例似乎表明您正在编写某种持久性API,我强烈建议您使用可实例化的类。对于像实用程序类这样的东西,使用静态方法是可以的,但如果你过度使用静态方法,你会很快发现你的代码变得无法扩展且无法维护。
答案 2 :(得分:0)
实际上,这取决于您使用该方法的情况。
例如,如果您正在实现命令模式,并且您不希望每次都实例化一个对象,那么静态方法可能会很有用。
同样,如果你只是在一个类中添加一些功能,那么实际上没有任何意义可以使该方法保持静态。
这些都不是更好。它只是意味着它们有不同的用途。枪是一个非常有用的工具包,但不是当你试图关闭电视时。看到我的观点?
答案 3 :(得分:0)
密封功能始终优于未密封,因为JITTER可以(选择)内联前者。静态函数始终是密封的,密封类中的所有方法也是如此。但是,避免将属性复制到静态上也是优选的。
正如克里斯上面所说,你需要根据具体情况来决定。 99%的时间没关系,因为性能足够好,或者瓶颈在其他地方,所以保持代码清洁。
答案 4 :(得分:0)
这基本上是“OOP与结构编程的优势”。在您的情况下,数据库连接会产生重大影响:它可以是类的字段,您可以在构造函数中提供一次。如果需要,这些方法可以使用它。 使用静态方法,您需要提供参数中的所有内容,甚至是总是相同的内容。
不依赖于对象内部状态的方法应该是静态的。