Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确地打扫教室_C#_Vb.net - Fatal编程技术网

C# 如何正确地打扫教室

C# 如何正确地打扫教室,c#,vb.net,C#,Vb.net,我有一个类,其中包含读取数据文件的函数。读取时,类将此数据存储在公共属性中 之后,我将puplic属性的内容写入数据库 然后它重复。这意味着我再次阅读了这个类的数据 在它再次出现之前,我想把教室打扫干净 最好的方法是什么 手动清除公共属性的内容更好,还是处理类更好。也许这是更优雅的方式 假设您的类看起来类似于: public class MyClass { public double IntField { get; set; } public string StringField { g

我有一个类,其中包含读取数据文件的函数。读取时,类将此数据存储在公共属性中

之后,我将puplic属性的内容写入数据库

然后它重复。这意味着我再次阅读了这个类的数据

在它再次出现之前,我想把教室打扫干净

最好的方法是什么


手动清除公共属性的内容更好,还是处理类更好。也许这是更优雅的方式

假设您的类看起来类似于:

public class MyClass
{
  public double IntField { get; set; }
  public string StringField { get; set; }
}
您的应用程序类似于:

public class MyApp
{
  public void Execute() {
    var myClass = new MyClass();

    // set properties
    myClass.IntField = 123;
    myClass.StringField = "Hello";

    // save to DB
  }
}

每次应用程序运行时,它都会运行
Execute
方法,该方法将创建类的新实例。这样,所有的类属性都将是空的或您称之为“clean”的。

创建新方法,将其命名为“clear_data”,在从执行此操作的函数加载数据之前调用它。也可能是您需要从析构函数调用它以防止内存泄漏(如果您有指向某个已分配内存的指针)

纪念图案呢?可能对您有用:

或者,正如前面所指出的,您还有3种其他好的可能性: -创建一个将属性设置为默认值的方法
Clear()
, -如果您有一些非托管资源,可以使用IDisposable接口,
-创建包含类的空实例的静态只读属性并重新分配它。但我会选择Memento/Clear way。

他的意思是重置为初始状态state@Igor可能会将成员重置为其
默认值
似乎您正在尝试重用引用类实例的变量来表示相同类型的不同对象。不要这样做。只需重新初始化变量并用属性的新值填充它
查看IDisposable这是定义需要清理的内容的常用方法
到目前为止,最简单的方法是创建类的新实例。这有点浪费,但它的寿命很短,而且永远不会脱离第0代。第0代分配从来都不需要担心。但这将导致许多实例。正确吗?是的,每次调用方法
execute
时,它都会导致一个新的
MyClass
实例。现在真正的问题是:这是个问题吗?很可能不会。垃圾收集器会很好地释放与myClass实例关联的内存;在为内存分配(或速度,或各种优化)优化代码之前,请确保这对您的应用程序来说确实是个问题,如果不是为了更好地结构化和可维护的代码,而不是“以某种方式节省一些内存字节但更难使用的代码”不知道为什么我会被否决,但@GianPaolo基本上总结了这个例子问题。这些实例将在
Execute
返回后的某个时间点进行垃圾收集。只要您的对象小于86000字节,它将位于Gen-0上,垃圾收集器将在Execute返回后立即收集,因此不必担心。