是否有内置的方法来识别类的实例?

时间:2010-08-25 20:02:37

标签: c# .net class instance

我正在使用我的一个C#.NET项目进行一些诊断日志记录,我希望能够记录代表一个特定类的实例的标识符。我知道我可以用一个静态变量做到这一点,每次创建一个类实例时它都会增加,但我只是想知道在.NET框架中是否有任何内置方法来执行此操作。也许使用反射或其他东西。

3 个答案:

答案 0 :(得分:8)

您可以在类中添加Guid属性,并在构造函数中对其进行初始化(保证每个实例都是唯一的)。

答案 1 :(得分:6)

只需添加Henk said in his answer关于GetHashCode的内容,并减轻他在该答案中收到的一些负面评论:

有一种方法可以在任意对象上调用GetHashCode,该对象独立于该对象的值,无论其类型是否已覆盖GetHashCode

看看System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode

当然,此值不保证是唯一的。也不是Guid(虽然是唯一的会涉及合法微观的赔率)。

我会说你的直觉是关于静态计数器变量的。但是,我应该提一下,在每个对象的构造函数中使用++运算符简单地递增它不是线程安全的。如果您可以从多个线程实例化一个类的实例,那么您可能希望使用Interlocked.Increment

答案 2 :(得分:0)

也许Object.ReferenceEquals可以解决您的问题。至少它可以告诉你一个物体是否与其他物体相同。

您不能使用静态变量,因为它在每个实例中都是相同的。它只会创建对象的计数。

您可以使用Jon B的解决方案,或者如果您希望数字标识符使用静态计数器并为字段分配ID。

public class Foo
{
    static int counter;
    public int InstanceId;

    public Foo()
    {
        InstanceId = counter++;
    }
}