静态优于静态的任何优点,用于简单的功能

时间:2013-03-07 22:30:45

标签: c# asp.net

这只是为了满足我的好奇心。与其他

相比,做其中一个是否有任何区别或优势
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中的静态类。然后使用实体框架来更新数据库。这没关系吗?

5 个答案:

答案 0 :(得分:2)

我绝对更喜欢静态的实例方法。原因是静态方法意味着您必须将全局可变状态引入系统。为了运行静态方法,需要访问某种类型的数据库连接并静态地执行。

应尽可能避免全球可变状态。它是一个迫在眉睫的bug场,阻碍了对代码库的未来更改(比如引入多个线程)。

答案 1 :(得分:1)

您给出的示例似乎表明您正在编写某种持久性API,我强烈建议您使用可实例化的类。对于像实用程序类这样的东西,使用静态方法是可以的,但如果你过度使用静态方法,你会很快发现你的代码变得无法扩展且无法维护。

答案 2 :(得分:0)

实际上,这取决于您使用该方法的情况。

例如,如果您正在实现命令模式,并且您不希望每次都实例化一个对象,那么静态方法可能会很有用。

同样,如果你只是在一个类中添加一些功能,那么实际上没有任何意义可以使该方法保持静态。

这些都不是更好。它只是意味着它们有不同的用途。枪是一个非常有用的工具包,但不是当你试图关闭电视时。看到我的观点?

答案 3 :(得分:0)

密封功能始终优于未密封,因为JITTER可以(选择)内联前者。静态函数始终是密封的,密封类中的所有方法也是如此。但是,避免将属性复制到静态上也是优选的。

正如克里斯上面所说,你需要根据具体情况来决定。 99%的时间没关系,因为性能足够好,或者瓶颈在其他地方,所以保持代码清洁。

答案 4 :(得分:0)

这基本上是“OOP与结构编程的优势”。在您的情况下,数据库连接会产生重大影响:它可以是类的字段,您可以在构造函数中提供一次。如果需要,这些方法可以使用它。 使用静态方法,您需要提供参数中的所有内容,甚至是总是相同的内容。

不依赖于对象内部状态的方法应该是静态的。