正在做一个噩梦试图拿出一个标题来恢复我的问题。
无论如何,我的问题很简单,这样做会更好:
Private TxtbxUserName As New TextBox With {.Text= "XXXX"}
Private Sub DoSomething(ByVal TextBoxText as string)
Dim Text as String = TextBoxText
End Sub
或者这样做?:
Private TxtbxUserName As New TextBox With {.Text = "XXXX"}
Private Sub DoSomething()
Dim Text as String = TxtbxUserName.text
End Sub
每种方法的具体优势是什么?
答案 0 :(得分:2)
很难说,通过这样一个简化的例子,因为两种选择都可以更好,具体取决于具体情况。一般来说,将值作为参数(如第一个示例中所示)比直接从控件获取值更可取。原因有很多,但是有一些原因可以想到:
Reusability
- 您可以从任何地方调用该方法,即使您从其他控件,文件,消息或其他任何位置获取值。Readability
- 更容易理解代码的作用和原因Testability
- 测试代码更容易,因为您可以将不同的值传递给它并测试结果而无需触摸UI 作为一般规则,您应该尽快通过控件的事件从控件中获取值,然后将值作为参数传递到各种业务方法中。如果需要使用任何结果更新控件,则应尽可能晚地设置控件。业务方法应返回值,而不是直接设置控件的值。
然而,话虽如此,如果你有一个完全或至少几乎完全处理UI的方法,它可能有意义直接使用控件。例如,如果使用来自定义UI的节点布局的XML文件中的数据填充树控件,则可以直接在方法中访问树控件。将数据加载到某种树数据结构中只是为了转向并读取树数据结构以填充树,这不一定是有意义的。这取决于。基本上,如果它是一个UI辅助方法 - 一种使得使用特定控件更容易的东西 - 那么有时候让它直接使用控件是有意义的。否则,如果它是标准的业务逻辑方法,您将希望尽可能地保持与UI相关的东西。
答案 1 :(得分:0)
除了Steven Doggart所写的内容之外,使用函数更有意义:
Private Function DoSomething(ByVal target As Control) As String
Return target.Text
End Function
因为你没有创造副作用 - 在你的例子中,副作用是改变一个超出你方法范围的变量。