【问题标题】:Static and Non Static methods [closed]静态和非静态方法 [关闭]
【发布时间】:2016-10-07 05:17:36
【问题描述】:

早安,

我正在开发 WindowsForm。我想出了2个解决方案。我想知道遵循哪种解决方案是好的做法?

解决方案 1: 我编写了一个常见的静态 方法来进行验证,例如电话文本框、强制文本框按键等。我有很多这样的常用方法。所以我所做的是我创建了一个实用程序类并将所有这些 static 方法放入其中。然后在整个应用程序中使用这些方法。

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

在 baseform 中,我从 Utility 类中移动了所有验证方法,然后将其设为非静态。

我还教过有关 UserControl。如果我这样做,我将再次处理对齐任务。所以只想出了两个解决方案

那么你能建议遵循哪个吗?

【问题讨论】:

标签: c#


【解决方案1】:

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

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

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

【讨论】:

  • 担心 Windows 窗体开发人员不喜欢这个解决方案,因为您需要创建更多的类、接口、更改构造函数以在那里传递接口实现 - 太多仅用于编写增加文件数量的测试 :)
  • @Fabio 这个问题是关于最佳实践的,所以我很抱歉我的回答:)
【解决方案2】:

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

根据您的情况进行一些假设,考虑在高层次上遵循​​以下想法 -

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

很好的讨论here

【讨论】:

    【解决方案3】:

    如果在每个表单中都使用这些通用控件,请使用用户控件而不是单独的表单。静态方法应该用于 utils 类型的需求。

    【讨论】:

    • 我教过用户控制。如果我这样做,我将再次处理对齐任务。所以只想出了两个解决方案
    【解决方案4】:

    前段时间,我尝试将您描述的两种解决方案用于不同的任务。每一个都有自己的优点和缺点。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 2020-12-27
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多