在每个班级中调用相同方法的最佳方法是什么?

时间:2016-07-13 14:42:27

标签: c# wpf class generics

在我的WPF应用程序的每个页面中,如果用户在文本框中输入有效日期,我需要有效。

我有5页,然后是5种方法,我用一点方法验证我的日期。

我想知道在每个页面/类中创建可调用的通用方法以确保我的日期有效的最佳解决方案/方法是什么?

public bool IsValidDate(string date)
{
    var regex = @"^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$";

    if (!string.IsNullOrEmpty(date))
    {
        var match = Regex.Match(date, regex); 

        return match.Success;
    }

    return true;
}

谢谢

5 个答案:

答案 0 :(得分:4)

您可以创建一个包含这样的辅助函数的新类:

public static class Helper
{
    public static bool IsValidDate(string date)
    {
        var regex = @"^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$";

        if (!string.IsNullOrEmpty(date))
        {
            var match = Regex.Match(date, regex); 

            return match.Success;
        }

        return true;
    }
}

然后你可以从以下任何地方调用它:

if (Helper.IsValidDate(someDateString))
    // Bleh

答案 1 :(得分:3)

为您的日期使用的任何类创建扩展方法。

我强烈建议不要使用字符串来存储日期,因为它们会导致运行时错误。

答案 2 :(得分:2)

它可能不适合这个特定的例子(这似乎属于一个帮助/实用程序类,就像另一个答案所暗示的那样),但你可以通过继承基类来共享所有页面中的方法:

public abstract class BaseWindow : Window {
    protected static bool IsValidDate(string date) {
        // Do your stuff...
    }
}

// This is your actual WPF page class - when Visual Studio builds it, just change the 
// inheritance from "Window" to "BaseWindow"
public partial class MyWindow : BaseWindow {
}

答案 3 :(得分:2)

您可以像其他答案之一那样创建一个辅助类,或者从基类继承并在那里实现它。比从原始类继承该类。

实用程序与基类的原因可以是:

  • 验证通常属于该屏幕,您可能在其他地方不需要它。比使用基类/继承更舒服。
  • 如果您还想在其他情况下使用验证机制,请将其放在帮助程序类中。
  • 使用继承机制,请记住验证类需要进行一些WPF / GUI导入,因此稍后在控制台应用程序中使用它可能会很棘手(因此请使用帮助程序)。

答案 4 :(得分:1)

我想说验证日期接近于业务逻辑,因此不应该直接在任何页面上完成。它应该在业务层处理。

编辑:我收回了我的答案。 itsme86是正确的。这更多是实用功能。