假设我有一个引用类型class Foo { }
,并且我将它的实例引用传递给两个单独的方法
void Main()
{
Foo f = new Foo();
Bar(f);
Baz(f);
}
void Bar(Foo f)
{
// ...
}
void Baz(Foo f)
{
// ...
}
在调试时,如何确定Bar
和Baz
中看到的对象是否指向内存中的同一对象?我想看GetHashCode()
不一定是一个指标,因为我可以在GetHashCode()
中覆盖Foo
以总是返回0
。
除了在C#中不可能的事实以及我对指针的一点知识外,我想看看参考指向的地址会给我一定的确定性。
我有哪些选择?
答案 0 :(得分:2)
Visual Studio调试器中有一个小功能,完全符合您的需求,而无需实现某些功能。
只需在方法上设置断点即可。当其中一个断点点击时,将您感兴趣的对象(f
类型的Foo
参数)添加到手表列表中。您确实可以在 Autos 或 Locals 窗口中找到该对象。
然后执行操作:右键单击列表中的对象条目,然后选择生成对象ID 。数字ID显示在列表中对象值的右侧。
现在继续调试。当您的第二个断点点击时,您会在本地人, Autos 以及手表窗口中看到f
对象出现具有相同的ID。这意味着 - 它是相同的对象实例。如果没有ID或它不同,那么这将是Foo
的不同实例。