gpt4 book ai didi

c# - 我如何获得一个 ID,使我能够区分一个类的不同实例?

转载 作者:可可西里 更新时间:2023-11-01 08:03:15 24 4
gpt4 key购买 nike

假设我有一个类,有两个实例:

MyClass a = new MyClass();
MyClass b = new MyClass();

MyClass 有一个方法 PrintUniqueInstanceID:

void PrintUniqueInstanceID()
{
Console.Write("Unique ID for the *instance* of this class: {0}",
[what goes here???]
);
}

理想情况下,输出应该是这样的:

Unique ID for the *instance* of this class: 23439434        // from a.PrintUniqueInstanceID
Unique ID for the *instance* of this class: 89654 // from b.PrintUniqueInstanceID

那么 - 我会在上面的“[这里有什么???]”中插入什么,它会为该类的每个唯一实例打印一个唯一编号?

想法

  1. 也许将“this”转换为一个 int 指针,然后使用它?
  2. 以某种方式使用 GCHandle?
  3. 在方法中访问“this”的属性以唯一标识它?

(可选)专家背景信息

我需要这个的原因是我使用 AOP 和 PostSharp 来自动检测线程问题。我需要在字典中查找类的每个唯一实例,以验证多个线程没有访问同一个类的唯一实例(如果每个类实例有一个线程就没问题)。

更新

正如其他人所指出的,我应该指出,我无法触及 30,000 行项目中的任何现有类。上面的 PrintUniqueInstanceID 是一个方面(请参阅 PostSharp ),它被添加到顶级类,被整个项目中的每个类继承,并在整个项目中的每个方法条目上执行。

一旦我确认一切都是线程安全的,我将删除方面以恢复性能。

最佳答案

向您的类添加一个 Guid 属性,然后在该类的构造函数中将其分配给 NewGuid()。

public class MyClass
{
public Guid InstanceID {get; private set;}
// Other properties, etc.

public MyClass()
{
this.InstanceID = Guid.NewGuid();
}

void PrintUniqueInstanceID()
{
Console.Write("Unique ID for the *instance* of this class: {0}", this.InstanceID);
}
}

关于c# - 我如何获得一个 ID,使我能够区分一个类的不同实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9788680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com