Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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# - Fatal编程技术网

C# 如何使用静态字段跟踪从特定类创建的对象数量

C# 如何使用静态字段跟踪从特定类创建的对象数量,c#,C#,我正在使用c#并且有一个问题,如何使用静态字段来计算类中的实例数,请计算内存,提前感谢。类似于 class someclass { private static int instanceCounter; public someclass() { someclass.instanceCounter++; } } 只需向类的构造函数添加一个计数器 class MyClass { static int instanceCount = 0; public MyCl

我正在使用c#并且有一个问题,如何使用静态字段来计算类中的实例数,请计算内存,提前感谢。

类似于

class someclass
{
    private static int instanceCounter;

    public someclass() { someclass.instanceCounter++; }
}

只需向类的构造函数添加一个计数器

class MyClass
{

    static int instanceCount = 0;

    public MyClass()
    {
        instanceCount++;
    }

}

每次创建类的实例时,构造函数都会运行。静态变量由所创建类的所有实例共享。

您可以使用构造函数和析构函数来实现所需的功能,但实际上不需要知道一次存在多少个类实例。听起来你在用错误的方式处理问题

class MyClass
{
    static int instances = 0;

    public MyClass()
    {
        instances++;
    }

    ~MyClass()
    {
        instances--;
    }
}

请注意,不会立即调用类的析构函数。垃圾收集器决定何时收集类的实例,从而决定何时调用析构函数。

若要简单地计算构造的数量,请声明一个静态字段,并使用
联锁。在中递增
以线程安全的方式递增静态字段

如果要计算活动对象的数量,还需要在终结器(即)中对该字段进行
联锁。减量
。但是,请注意,添加终结器将使对象通过终结队列,从而进行垃圾收集


根据您定义“活动”对象的方式,您可能有兴趣在
IDisposable.Dispose
实现中添加
Interlocated.Decrement

嗯,您在.Net中并没有析构函数的概念,所以我无法100%确定如何跟踪它,没有一个明确的COM风格的AddRef/RemoveRef。你似乎不明白我的意思,我想知道这是如何在内存中处理的,但感谢你的注意:)虽然OP的问题形式不好,但它们什么时候被销毁了呢?可能是因为“请根据内存计算”不清楚。此外,有正确的拼写,大写和标点符号将有助于。。。