0

正在做一场噩梦,试图想出一个标题来继续我的问题。

无论如何,我的问题很简单,这样做是否更好:

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

每种方法的具体优势是什么?

4

2 回答 2

2

很难说,用这样一个简化的例子,因为这两种选择都可能是更可取的,这取决于具体情况。不过,一般来说,将值作为参数(如在您的第一个示例中)比直接从控件获取值更可取。原因有很多,但我想到了以下几个:

  • Reusability- 您可以从任何地方调用该方法,即使您从不同的控件、文件、消息或其他任何地方获取值。
  • Readability- 更容易理解代码在做什么以及为什么
  • Testability- 测试代码更容易,因为您可以向其中传递不同的值并测试结果,而无需触摸 UI

作为一般规则,您应该尽快从控件中获取值,通常是立即在控件的事件中,然后将值作为参数传递给各种业务方法。如果需要使用任何结果更新控件,则应尽可能晚地设置控件。业务方法应该返回值而不是直接设置控件的值。

但是,话虽如此,如果您有一个完全或至少几乎完全处理 UI 的方法,那么直接使用控件可能是有意义的。例如,如果您要使用定义 UI 的节点布局的 XML 文件中的数据填充树控件,则直接在方法中访问树控件可能是有意义的。将数据加载到某种树数据结构中只是为了转身并读取树数据结构以填充树并不一定有意义。这取决于。基本上,如果它是一种 UI 辅助方法——使使用特定控件更容易的方法——那么有时让它直接与控件一起使用是有意义的。否则,如果它是一个标准的业务逻辑方法,你'

于 2013-09-23T18:49:26.040 回答
0

就像 Steven Doggart 写的一样,使用函数可能更有意义:

Private Function DoSomething(ByVal target As Control) As String
    Return target.Text
End Function

那么你不会产生副作用 - 在你的例子中,副作用是改变一个超出你的方法范围的变量。

于 2013-09-23T19:39:18.030 回答