2016-10-07 257 views
-4

早上好,静态和非静态方法

我正在使用WindowsForm。我想出了两个解决方案。我想知道哪种解决方案是最佳实践?

解决方案1: 我有一个书面的共同静态方法如电话,文本框验证,mandatory_textbox-按键etc.I有很多这样的常用方法。所以我所做的是创建了一个实用程序类,并将所有这些方法都放入其中。然后在应用程序中使用这些方法。

解决方案2: 我有一个想法,所以我所做的是我创建了一个音素表示继承类的话,我继承了这种基本形式中的所有其他形式的(多层次继承)。

在baseform中,我将所有的确认方法从Utility类中移出,然后变为非静态的。

我也教过UserControl。如果我这样做,我再次与对齐任务一起工作。所以只有想出了两种解决方案

所以你可以建议哪些遵循?

+0

http://stackoverflow.com/questions/798036/how-to-decide-between-c-sharp-static-and-non-static-methods?rq=1 – Natrium

+0

http://stackoverflow.com/questions/11027540/should-i-go-with-static-methods-or-non-static-methods?rq = 1 – Natrium

+1

您也可以通过派生自Textbox来创建自定义文本框。 – CSharpie

回答

0

对于是否应该将方法声明为静态方法还没有直截了当的答案。这取决于您的应用程序的上下文和功能。

一些假设您的具体情况去考虑高级别以下的想法 -

  • 如果验证是关系到一个特定的形式而已,并不适用于其他形式,你的窗体类答中声明它私人方法。如果这些验证不需要任何类实例,则可以声明它们是静态的。
  • 如果某些验证对于不同的表单很常见,则可以将它们声明为静态。请注意,不要将控制权交给这些方法,而是传递要验证的值以实现更好的设计。
  • 考虑宣布碱形式验证只有那些适用于全部或者如果不是大多数的形式,并再次,如果他们不使用任何实例对象,你可以将它们标记为静态

好讨论here

0

使用用户控件而不是单独的窗体,如果这些常用控件正在每个窗体中使用。静态方法应该用于实用类型的需求。

+0

。如果我这样做,我再次与对齐任务一起工作。所以只有两个解决方案 – user2115618

0

前段时间我试着将你所描述的解决方案用于不同的任务。每一个都有自己的优缺点。

  1. 因此,在第一种情况下,我们只有一个ststic类和每个静态方法在内存中的一个实现。我们可以将此方法应用于任何数量的其他对象实例。但是我们需要在我们将使用它的每个名称空间中访问这个类。 因此,如果我们将对此类的任何代码进行一些更改,它将应用于与此类相关的所有对象实例。有时候很方便,有时候不方便。

  2. 在第二种情况下,我们将得到内存(低效率)基本形式的新实例,但我们也有像第一种方法继承形式之一基实现的方法。作为额外的好处,我们总是可以仅针对特定情况下的特殊情况(如果需要)覆盖方法。

无论如何,只有您可以根据您的任务上下文做出正确的决定。

1

您可以在非静态类中移动静态方法,并将具体对象(可能通过接口)传递给需要该功能的类/方法。通过这种方式,您可以使代码易于测试并解耦。

举例来说,如果您有一个类PhoneNumberValidator实施接口IValidator其方法bool Validate(string phoneNumber),并将其传递到需要验证电话号码的位置。

我想这应该是最好的做法,有一个分离的应用程序。

+1

害怕Windows窗体开发人员不喜欢这种解决方案,因为您需要创建更多的类,接口,更改构造函数以在其中传递接口实现 - 太多仅用于编写增加文件量的测试: ) – Fabio

+0

@Fabio问题是关于最佳做法,所以我很抱歉我的回答:) – meJustAndrew