C# 使用静态类作为变量容器在整个程序之间传递是一种不好的做法吗

C# 使用静态类作为变量容器在整个程序之间传递是一种不好的做法吗,c#,winforms,class,C#,Winforms,Class,我真的很想得到一些关于这种方法的信息。我创建了一个静态类来保存将通过我的应用程序使用的变量。这是坏习惯吗?我想知道更多关于这一点,这样在未来我就不会做出糟糕的设计结构 这是我的静态类: public static class clsIdStorage { #region Pass Through Variable public static int? WorkOrderNumber { get; set; } public static bool WorkOrderVe

我真的很想得到一些关于这种方法的信息。我创建了一个静态类来保存将通过我的应用程序使用的变量。这是坏习惯吗?我想知道更多关于这一点,这样在未来我就不会做出糟糕的设计结构

这是我的静态类:

 public static class clsIdStorage
{
    #region Pass Through Variable
    public static int? WorkOrderNumber { get; set; }
    public static bool WorkOrderVerified { get; set; }
    public static bool ProductSelected { get; set; }
    public static int EmployeeID { get; set; }
    public static bool CheckedIn { get; set; }
    public static int ProductSerialNumber { get; set; }
    public static int BoardSerialNumber { get; set; }
    public static long ProductID { get; set; }
    public static long BoardID { get; set; }
    public static string FullName {get; set;}
    public static int? BoardWoId { get; set; }
    public static int? ProductWoId { get; set; }
    public static bool ValidProductWOID { get; set; }
    public static bool ValidBoardWOID { get; set; }
    public static string PartNumber { get; set; }
    public static string BoardPartNumber { get; set; }
    public static object ProcessorBoard { get; set; }
    public static object AudioBoard { get; set; }
    public static bool RepairsCompleted { get; set; }
    public static int WorkOrderLookUp { get; set; }
    #endregion

    #region Time Variable
    // Work Order Time
    public static string EmployeeCheckIn { get; set; }
    public static string EmployeeCheckOut { get; set; }
    public static string BoardWorkOrderTime { get; set; }
    public static string ProductWorkOrderTime { get; set; }

    // Product Time
    public static string ProductCheckIn { get; set; }
    public static string ProductCheckOut { get; set; }

    // Board Time
    public static string BoardCheckIn { get; set; }
    public static string BoardCheckOut { get; set; }

    // Process flow variables
    public static int LocationID { get; set; }
    public static object PreviousLocation { get; set; }
    public static int ScenarioID { get; set; }
    #endregion
}

我看到这种方法的一个问题是,您的静态类和成员似乎与您需要的多个实例相关

例如,当您在上面设置这些值时,每个值(如ProductID)一次都有一个实例。有些人选择面向对象的方法来存储多个ProductID实例等此类信息

我仍然在调用函数时大量使用静态类,但是当我需要存储许多相同类型信息的实例或记录时,我选择了面向对象的方法


就能够调用一个静态类并在整个程序中读取它的变量而言,这在某些方面是很好和有用的。但是您的成员的概要让我认为这种方法对于这种类型的数据是错误的。

这里最大的问题是与依赖性相关的。解决方案中的每个项目都需要有对静态类的引用。如果您甚至需要添加一个新值,那么您需要重新编译所有类

此外,如果您有一个项目定义了一个自定义类,您希望在静态类中引用该自定义类,那么您就有一个循环依赖性问题

您还向您的所有解决方案公开了许多变量,这可能会允许部分代码执行不安全的操作(即根据静态文件中找到的路径覆盖文件内容)

这是个坏习惯


您应该使用配置文件或某种形式的依赖注入来代替。

简短回答:不,这可能不是一种好的做法。
长句回答:对于这个问题来说,这是一个更好的地方。我建议把它带到那里。

最好是“最佳实践”。与其使用
静态类,不如将它们保存在配置文件中。搜索WinForm应用程序资源。@Evanark这里有一个链接,指向Well,该程序一次处理一个productID,例如,我正在为给定的序列号(productID)创建修复检查程序日志修复时间,每次扫描序列号时,productID即为开始时间,当用户单击“完成”时,时间停止。然后扫描新序列号并覆盖ID。此程序仅由一个人使用。我确实看到了为多个ID进行不同设计的价值。我最初创建这个类只是为了来回传递值,而不是在表单之间传递值。它更像一个容器。