这两个C#方法有什么区别?

4
这两种情况有何区别?第一种情况,如果我打开连接并将其作为参数传递给我的方法,与直接在方法中打开连接相比?
cnn.open()
func(cnn,param1,param2);

vs

func(cnn, param1,param2)
{
  cnn.open();
  //open connection here
}

5
那是我见过的最奇怪的 C# 方法声明。 - Neil Knight
2
这可能只是他想要做的伪代码。 - Filip Ekberg
5个回答

2

除了一个情况外,你发布的代码没有任何区别,这种情况是在其中一个情况下,你的调用函数需要负责打开/关闭连接,在另一种情况下,你希望该函数执行此操作。


1
在这两种情况下,被调用方法的期望存在巨大差异。 - Filip Ekberg
很明显,方法签名并没有清楚地说明应该做什么。最好的做法是在方法中检查连接是否打开,如果没有打开就打开并关闭它,否则直接使用。当我说没有区别时,我指的是从一般功能的角度来看。 - Paddy

0

区别在于您想如何使用连接和性能。如果该函数只需要调用一次,且您没有调用其他函数或对连接进行任何其他操作,则该函数的第二个版本甚至可以简化为:

func(param1, param2) {
    Connection c = ....
    c.Open(...);
    ...
    c.Close();
}

然而,如果您在连接上调用多个函数,甚至在连接上多次调用该函数,或者如果创建和配置连接在代码中的更高层,则应使用该函数的第一个版本,并添加异常抛出以表示连接未打开。

0

区别在于第二种方法中,您打开了连接。

在第一种方法中,您希望该方法仅使用连接而不关心清理资源。


0

在功能上没有区别,但打开和关闭连接的代码行通常应尽可能靠近,因此它们应该在同一个方法中。


0

我认为你不应该要求区别,而是应该解释你所处的情况,并询问哪种情况下应该使用什么建议。

无论如何,正如其他人告诉你的那样,在Case 2中,连接对象及其生命周期封装在被调用函数内部。如果不希望在此函数外执行数据库操作,则建议使用此方法。

否则,如果您有任何其他数据库活动需要在此函数范围之外完成,例如在调用函数或从调用函数调用的任何其他函数(除了func)中,则应使用Case 1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接