C# 一次编写一条记录,使用一个静态类?

C# 一次编写一条记录,使用一个静态类?,c#,.net,class,C#,.net,Class,每次按下按钮时,我都会在文件中写入一行文本 我定义了一个静态类,如下所示: public static class PalletRecord { public static string MachineName { get; set; } public static DateTime TimeStamp { get; set; } public static string BranchPlant { get; set; } public static string

每次按下按钮时,我都会在文件中写入一行文本

我定义了一个静态类,如下所示:

public static class PalletRecord
{
    public static string MachineName { get; set; }
    public static DateTime TimeStamp { get; set; }
    public static string BranchPlant { get; set; }
    public static string Location { get; set; }
    public static string Data { get; set; }
    public static string ItemCode { get; set; }
    public static string ItemDescription { get; set; }
    public static decimal Quantity { get; set; }
}
每次需要写入文件时,我都会填充静态类属性,并使用file.AppendAllLines写入文本文件


我应该用非静态类来完成吗?

是的!使用静力学来保持这样的状态会给您带来麻烦。如果您现在或将来可能需要多线程,这可能尤其正确,因为静态状态由所有线程共享。另一个问题可能是一个不完整的初始化错误,给您留下½个以前记录的状态和½个新记录的状态

更好的方法是使属性成为非静态的,并为每个记录创建一个具有正确属性的类实例。您可以构造一个构造函数来设置属性,这样您就知道在任何时候都有一个有效的记录(也可以考虑让属性设置器私有)。
这也可以更好地模拟您正在处理的问题。如果在文件中写入多个不同的记录,最好用表示记录的类的实例来表示。在我看来,为需要编写的每条记录使用类的实例是正确的干净的面向对象方法。

是的!使用静力学来保持这样的状态会给您带来麻烦。如果您现在或将来可能需要多线程,这可能尤其正确,因为静态状态由所有线程共享。另一个问题可能是一个不完整的初始化错误,给您留下½个以前记录的状态和½个新记录的状态

更好的方法是使属性成为非静态的,并为每个记录创建一个具有正确属性的类实例。您可以构造一个构造函数来设置属性,这样您就知道在任何时候都有一个有效的记录(也可以考虑让属性设置器私有)。

这也可以更好地模拟您正在处理的问题。如果在文件中写入多个不同的记录,最好用表示记录的类的实例来表示。在我看来,为需要编写的每条记录使用类的实例是正确的干净的面向对象方法。

没有大的区别。如果行得通,就行了。创建新类会占用更多内存。我会创建一个新类,但无论如何都不是什么大事。若它保存在数据库中并被丢弃,那个么您的解决方案是有效的。如果记录保存在内存中,我会为每条记录创建一个新类。

没有太大区别。如果行得通,就行了。创建新类会占用更多内存。我会创建一个新类,但无论如何都不是什么大事。若它保存在数据库中并被丢弃,那个么您的解决方案是有效的。如果记录保存在内存中,我会为每条记录创建一个新类。

这里可能没有真正正确的答案。我可能会使用一个类的实例,但是如果你使用静态属性的方法有效,那么谁会说它错了呢?你能展示你是如何创建这个类的实例的吗?你能展示一下按钮吗?点击事件代码。。?这也是一个控制台应用程序还是一个winforms应用程序?是的,我肯定会用一个不可变的类来编写它,该类在其构造函数中需要这些参数。你的类不是staic,你的变量是静态的,这确实是静态的,我更正了我的帖子。这里可能没有一个真正的“正确”答案。我可能会使用一个类的实例,但是如果你使用静态属性的方法有效,那么谁会说它错了呢?你能展示你是如何创建这个类的实例的吗?你能展示一下按钮吗?点击事件代码。。?这也是一个控制台应用程序还是winforms应用程序?是的,我肯定会用一个不可变的类来编写它,该类在其构造函数中需要这些参数。你的类不是staic,你的变量是静态的,很抱歉,它是静态的。事实上,我更正了我的博文。。。直到有多个线程同时尝试使用它,或者您没有完全“清除/重新初始化”以前使用的值。我非常怀疑,如果创建一个类型的少数实例,其中包含几十个字节,那么会出现严重的内存问题。他们的生命如此短暂,以致于他们的生命永远不会有任何值得思考的东西。。。直到有多个线程同时尝试使用它,或者您没有完全“清除/重新初始化”以前使用的值。我非常怀疑,如果创建一个类型的少数实例,其中包含几十个字节,那么会出现严重的内存问题。它们的生命周期如此短,以至于它永远不会成为任何值得考虑的问题。另一个问题是,如果您不记得将所有值重新初始化回默认状态(特别是如果您没有每次设置值),则将使用上一次写入时最后使用的值。是的,我还可以想到其他问题,但不完全初始化也很可能发生;在答案中添加了这一点。谢谢。另一个问题是,如果您不记得将所有值重新初始化回默认状态(特别是如果您没有每次设置值),则将使用上一次写入中最后使用的值。是的,我也可以想到其他问题,但不完全初始化也很可能发生;在答案中添加了这一点。谢谢