2

这只是为了满足我的好奇心。做其中一个与另一个相比有什么区别或优势吗

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 传递给静态页面方法。页面方法解析 JSON 并将新变量传递给其他 DLL 中的静态类。然后使用实体框架来更新数据库。这个可以吗?

4

5 回答 5

2

我绝对更喜欢实例方法而不是静态方法。原因是静态方法意味着您必须将全局可变状态引入系统。为了发挥作用,静态方法需要访问某种数据库连接并以静态方式进行。

应尽可能避免全局可变状态。这是一个迫在眉睫的错误农场,会阻碍您对代码库的未来更改(例如引入多个线程)。

于 2013-03-07T23:09:48.273 回答
1

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

于 2013-03-07T22:42:47.800 回答
0

密封函数总是优于非密封函数,因为 JITTER 可以(选择)内联前者。静态函数总是密封的,密封类中的所有方法也是如此。然而,避免将属性复制到静态也是首选。

因此,正如克里斯上面所说,您需要根据具体情况做出决定。99% 的情况下这无关紧要,因为性能足够好,或者瓶颈在其他地方,所以请保持代码干净。

于 2013-03-07T22:39:07.693 回答
0

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

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

于 2013-03-07T22:39:50.870 回答
0

真的,这取决于您使用该方法的情况。

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

同样,如果您只是向一个类添加一些功能,那么将方法设为静态确实没有任何意义。

这些都不意味着一个比另一个更好。这只是意味着它们有不同的用途。枪是一种非常有用的工具,但当你试图关掉电视时却不是这样。明白我的意思了吗?

于 2013-03-07T22:35:21.400 回答