我正在学习一些C#,在教程中,为了教学,他们通常会将大部分代码放在按钮点击上。例如,如果他们要显示流读取器,他们会这样做:
StreamReader sr = new StreamReader();
..在按钮的点击功能中。
这是一个糟糕的编程习惯吗?从javascript,我记得在我写的一些代码上读了一个警告,说明了在超时事件中创建一个函数。是否应在按钮单击功能之外声明所有变量和对象?
答案 0 :(得分:2)
我正在学习一些C#,在教程中,他们通常会将大部分代码放在按钮点击上以便教学
将代码置于单击处理程序中的原因是单击处理程序与UI特定相关,而其余代码可能不是。
流读取器从流中读取。处理流的代码应与其分组。处理您在UI上单击的事实的代码与从流中读取无关,因此应将其分开。
通常,您应该对代码进行分组,以便逻辑上相似的代码部分在一起,并且处理完全不同的代码的代码部分是分开的。这会给你“高cohesion”。它与the Single Responsibility Principle有关。
是否应在按钮单击功能之外声明所有变量和对象?
绝对不是。如果在处理UI事件时创建特定对象是有意义的,请执行此操作。
然而正如我之前提到的,如果你在UI点击处理程序中处理非UI事物,那么你会同时做太多事情。将流代码拆分为另一种方法,另一组方法或另一种方法。这样可以更轻松地阅读代码,这将使您的代码更有可能被重用,并且可以更轻松地编辑代码。
UI逻辑和流程因为笨拙而需要大量的解决方案和特殊处理而臭名昭着。这也是您的应用程序领域,您将获得最多的反馈,因此它将经历最大的变化。每个人都会对您的用户界面应如何运作发表意见,包括非技术用户。如果您通过将UI逻辑与应用程序其余部分中的逻辑分开来防范这种情况,那么这些更改将更容易实现。
答案 1 :(得分:0)
您可以在处理程序中创建实例,这是常见的做法,因为一切都发生在处理程序中的UI线程上。此外,一旦该方法完成,该变量将超出范围并被标记为垃圾收集。
答案 2 :(得分:0)
这一切都取决于您需要对象生存多长时间,如果您不在按钮事件之外使用它,那么它可能应该在那里,以便在事件结束时进行垃圾收集,如果您确实需要使用外面的对象然后在你的类中使用一个字段应该没问题。
答案 3 :(得分:0)
在事件处理程序中创建实例并不是一个坏主意,但如果有任何代码可能要在代码中调用多个位置,那么最好将该部分代码添加到单独的方法而不是尝试模拟按钮点击事件