静态和非静态方法

时间:2016-10-07 05:17:37

标签: c#

早上好,

我正在使用WindowsForm。我想出了两个解决方案。我想知道哪种解决方案是好的做法?

解决方案1: 我有一个常见的静态验证方法,如电话文本框,mandatory_textbox-key press等。我有很多常用的方法。所以我做的是创建了一个实用程序类,并将所有这些静态方法放在其中。然后在整个应用程序中使用这些方法。

解决方案2: 我有了一个想法,所以我做的是创建了一个基础形式继承的 Form 类,然后我以所有其他形式继承了这个基础形式(多级继承)。

在baseform中,我将所有验证方法从Utility类中移出,然后进行非静态验证。

我还教过UserControl。如果我这样做,我再次使用对齐任务。所以只提出了两个解决方案

那你能建议一下吗?

4 个答案:

答案 0 :(得分:1)

您可以将静态方法移动到非静态类中,并将具体对象(可能通过接口)传递给需要该功能的类/方法。这样,您可以轻松地对代码进行测试和解耦。

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

我想这应该是一个解耦应用程序的最佳实践。

答案 1 :(得分:0)

如果在每种形式中使用这些常用控件,请使用User Control而不是单独的表单。静态方法应该用于工具类的要求。

答案 2 :(得分:0)

有些时候,我尝试使用您描述的两种解决方案来完成不同的任务。每一个都有自己的优点和缺点。

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

  2. 在第二种情况下,我们将在内存中获得基本表单的新实例(效率较低),但我们也有一个基本实现的方法用于继承表单,如第一种方法。作为额外的好处,我们总是可以为特定情况(仅在需要时)覆盖某些特定情况的方法。

  3. 在任何情况下,只有您可以根据您的任务背景做出正确的决定。

答案 3 :(得分:0)

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

对你的情况做一些假设,考虑高级别的想法 -

  • 如果验证仅与某个特定表单相关,并且不适用于其他表单,请在表单类和私有方法中声明它。如果这些验证不需要任何类实例,则可以将它们声明为静态。
  • 如果某些验证对于不同的表单很常见,您可以将它们声明为静态。请小心谨慎,不要将控件传递给这些方法,而是传递要验证的值以便更好地进行设计。
  • 仅当基本形式的验证适用于所有或不是大多数表单时,才考虑以基本形式声明验证,并且如果它们不使用任何实例对象,则可以将它们标记为静态

一个很好的讨论here