c# – 关于过载的最佳做法是什么?
我想知道什么是最佳实践,或者至少是什么是超载的标准.我正在使用c#3.5,所以我没有可选参数.假设我有以下方法:
Foo(string param1,string param2) { SqlConnection connection = SM.Program.GetConnection(); SqlCommand command = connection.CreateCommand(); command.CommandText = "UPDATE Table" + "SET Pla = @pla " + "WHERE Foo = @foo"; try { command.Parameters.AddWithValue("@pla",param1); command.Parameters.AddWithValue("@foo",param2); connection.Open(); command.ExecuteNonQuery(); } finally { connection.Dispose(); command.Dispose(); } } 而且我需要一个带有另一个参数的重载,比如一个sqltransaction Foo(string param1,string param2,SqlTransaction trans) 第二种方法基本上是相同的,但它会在事务中执行操作 现在我想知道我该怎么办?只有一种接受null argurment作为事务的方法,在这种情况下,不使用任何或2种方法,但除了事务之外,还可以使用mutch复制/粘贴代码? 什么被认为是这种事情的最佳做法? 编辑:我认为一般的想法似乎在超载之间进行链接.但我仍然想知道在那种情况下不接受null参数的方法是一种坏事吗? 解决方法
在
DRY principle之前,你永远不应该复制粘贴代码.
因此,有这样的两种方法,你应该总是有某种链接. public void Foo(string param1,param2) { Foo(param1,param2,null); } public void Foo(string param1,SqlTransaction trans) { //do stuff,handle null value for trans } 有关默认参数的更新 在某些情况下,使用单个方法而不是重载提供默认参数可能被认为是不好的做法,尤其是在编写库时: //assembly1.dll public void Foo(int a,int b,int c = 3) { ... } //assembly2.dll void Bar() { Foo(1,2); } 会发生什么是编译器用Foo(1,2,3)替换调用Foo(1,2). 现在,假设我们要将c的默认值更改为4并更新assembly1.dll而不更改assembly2.dll. 我们期望调用Foo(1,4)但实际上仍然调用Foo(1,3),因为默认值存储在调用者的位置! 通过使用重载,默认值3存储在它所属的assembly1.dll中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |